{"id":15047463,"url":"https://github.com/lackhole/stl-preview","last_synced_at":"2025-04-10T00:51:13.383Z","repository":{"id":244402919,"uuid":"812148596","full_name":"lackhole/stl-preview","owner":"lackhole","description":"C++26 STL for C++14~ developers","archived":false,"fork":false,"pushed_at":"2025-04-09T09:02:44.000Z","size":2737,"stargazers_count":10,"open_issues_count":4,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-10T00:51:05.685Z","etag":null,"topics":["cpp","cpp14","cpp17","cpp20","cpp23","cpp26","expected","library","monadic","preview","ranges","standard","standard-library","standard-template-library","stl","template","variant"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lackhole.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-08T04:58:03.000Z","updated_at":"2025-04-02T04:35:47.000Z","dependencies_parsed_at":"2024-06-28T12:26:04.481Z","dependency_job_id":"1d0c467e-0230-43b9-8a4f-ab5ac8841e23","html_url":"https://github.com/lackhole/stl-preview","commit_stats":{"total_commits":92,"total_committers":2,"mean_commits":46.0,"dds":"0.021739130434782594","last_synced_commit":"8a219939b9e4d6e3dcf0a09af4a1eb4528a04ebd"},"previous_names":["lackhole/stl-preview"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lackhole%2Fstl-preview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lackhole%2Fstl-preview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lackhole%2Fstl-preview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lackhole%2Fstl-preview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lackhole","download_url":"https://codeload.github.com/lackhole/stl-preview/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137997,"owners_count":21053775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp14","cpp17","cpp20","cpp23","cpp26","expected","library","monadic","preview","ranges","standard","standard-library","standard-template-library","stl","template","variant"],"created_at":"2024-09-24T20:58:46.662Z","updated_at":"2025-04-10T00:51:13.359Z","avatar_url":"https://github.com/lackhole.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# STL Preview\n![logo.png](logo.png)\n\n## Description\n**Use the latest STL implementation regardless of your C++ version (C++14 ~)**\n\n```c++\n// All implementations are written under C++14 standard semantics\n#include \"preview/ranges.h\"\n\nauto map = preview::views::iota('A', 'E') | \n           preview::views::enumerate | \n           preview::ranges::to\u003cstd::map\u003e(); // See notes about CTAD below\n\nstd::cout \u003c\u003c map[0] \u003c\u003c ' '\n          \u003c\u003c map[1] \u003c\u003c ' '\n          \u003c\u003c map[2] \u003c\u003c '\\n';\n// A B C\n```\n\n**`preview` is standard-conforming, and is compatible with existing STL**\n```c++\n// Pre-C++20 iterators are fully compatible\nauto floats = std::istringstream{\"1.1  2.2\\t3.3\\v4.4\\f55\\n66\\r7.7  8.8\"};\nranges::copy(views::istream\u003cfloat\u003e(floats), std::ostream_iterator\u003cfloat\u003e{std::cout, \", \"});\n\n// Complex ranges/iterators are also compatible with both pre C++20 and \n// post C++20 std::iterator_traits\nauto r = preview::views::iota(0) |\n      preview::views::take(10) |\n      preview::views::filter([](auto x) { return x % 2 == 0; });\n\nstatic_assert(std::is_same\u003c\n    std::iterator_traits\u003cdecltype(r.begin())\u003e::reference,\n    int\n\u003e::value, \"\");\n\n```\n\n**Up to C++26 STL are available**\n```c++\nvoid foo(preview::span\u003cint\u003e) {}\n\nint main() {\n  // span with C++26 standard\n  foo({1, 2, 3});\n  \n  preview::variant\u003cint, float, double\u003e v{1.0f};\n  v.visit([](auto x) {\n    // member visit(): C++26 standard\n  });\n  \n  // views::concat\n  std::vector\u003cchar\u003e v = {'h', 'e', 'l'};\n  std::string s = \"lo, \";\n  preview::string_view sv = \"world\";\n  std::list\u003cchar\u003e l = {'!'};\n\n  // hello, world!\n  for (auto c : preview::views::concat(v, s, sv, l)) {\n    std::cout \u003c\u003c c;\n  }\n  \n  // expected\n  auto process = [](preview::string_view str) -\u003e preview::expected\u003cint, std::string\u003e {\n    return parse_number(str)\n      .transform([](double v) { return static_cast\u003cint\u003e(v); })\n      .transform_error([](parse_error e) {\n        return e == parse_error::invalid_input ? \"invalid input\" : \"overflow\";\n      });\n  };\n  std::cout \u003c\u003c process(\"42\").value_or(-1) \u003c\u003c '\\n;'; // 42\n  std::cout \u003c\u003c process(\"inf\").value_or(-1) \u003c\u003c '\\n'; // -1\n}\n```\n\n## Compiler Support\n[![Build Status](https://github.com/lackhole/stl-preview/actions/workflows/cmake-multi-platform.yml/badge.svg)](https://github.com/lackhole/stl-preview/actions/workflows/cmake-multi-platform.yml)\n\nNote: Requires C++14 or later\n\n| Compiler    | Minimum version tested             | Maximum version tested             |\n|-------------|------------------------------------|------------------------------------|\n| MSVC        | 19.16.27051.0 (Visual Studio 2017) | 19.40.33811.0 (Visual Studio 2022) |\n| gcc         | 9.5.0                              | 13.1.0                             |\n| clang       | 11.1.0                             | 15.0.7                             |\n| Apple clang | 14.0.0.14000029                    | 15.0.0.15000040 (Silicon)          |\n| Android NDK | r18 (clang 7.0)                    | r26 (clang 17.0.2)                 |\n| Emscripten  | 3.1.20 (clang 16.0.0)              | latest(3.1.61) (clang 19.0.0)      |\n| MinGW       | 13.1.0                             | 14.2.0                             |\n| Intel C++   | ?                                  | icx 2024.2                         |\n\n## Media\nCppCon2024 \n* [C++17/20/23/26 for old C++ Developers - STL Preview](media/cppcon_poster.pdf)\n* Best Poster Award\n\n## Build \u0026 Install\n### CMake\nCopy this repository under your project and use `add_subdirectory`\n```cmake\nadd_subdirectory(path/to/preview)\ntarget_link_libraries(your-project INTERFACE preview)\n```\n\n### Non-CMake\nAlthough it is not recommended, you can just copy \u0026 paste files under `include/` into your project.  \n* Note: Without CMake configuration, heuristic compiler/STL checks will be performed. \n\n### Installation\nWith the reason stated in [Non-CMake](#non-cmake), installation is possible but not recommended.\n\n## Implementation Status\nImplementation available in C++14 ~ :\n\n| Header                              | Total                                                   |   | C++17                                                  | C++20                                                   | C++23                                                  | C++26                                                  |\n|-------------------------------------|---------------------------------------------------------|---|--------------------------------------------------------|---------------------------------------------------------|--------------------------------------------------------|--------------------------------------------------------|\n|                                     | ![](https://img.shields.io/badge/316/694-grey)![][p046] |   | ![](https://img.shields.io/badge/44/113-grey)![][p039] | ![](https://img.shields.io/badge/233/429-grey)![][p054] | ![](https://img.shields.io/badge/61/144-grey)![][p042] | ![](https://img.shields.io/badge/18/135-grey)![][p013] |\n|                                     |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n| [algorithm](#algorithm)             | ![](https://img.shields.io/badge/56/115-grey)![][p049]  |   | ![](https://img.shields.io/badge/2/4-grey)![][p050]    | ![](https://img.shields.io/badge/47/96-grey)![][p049]   | ![](https://img.shields.io/badge/9/18-grey)![][p050]   | ![](https://img.shields.io/badge/7/23-grey)![][p030]   |\n| [any](#any)                         | ![](https://img.shields.io/badge/5/5-grey)![][p100]     |   | ![](https://img.shields.io/badge/5/5-grey)![][p100]    |                                                         |                                                        |                                                        |\n| [array](#array)                     | ![](https://img.shields.io/badge/1/1-grey)![][p100]     |   |                                                        | ![](https://img.shields.io/badge/1/1-grey)![][p100]     |                                                        |                                                        |\n| [bit](#bit)                         | ![](https://img.shields.io/badge/2/14-grey)![][p014]    |   |                                                        | ![](https://img.shields.io/badge/1/13-grey)![][p008]    | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |                                                        |\n| [concepts](#concepts)               | ![](https://img.shields.io/badge/30/30-grey)![][p100]   |   |                                                        | ![](https://img.shields.io/badge/30/30-grey)![][p100]   | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |                                                        |\n| [cstddef](#cstddef)                 | ![](https://img.shields.io/badge/2/2-grey)![][p100]     |   | ![](https://img.shields.io/badge/2/2-grey)![][p100]    |                                                         |                                                        |                                                        |\n| [expected](#expected)               | ![](https://img.shields.io/badge/4/4-grey)![][p100]     |   |                                                        |                                                         | ![](https://img.shields.io/badge/4/4-grey)![][p100]    |                                                        |\n| [functional](#functional)           | ![](https://img.shields.io/badge/10/16-grey)![][p063]   |   | ![](https://img.shields.io/badge/4/6-grey)![][p067]    | ![](https://img.shields.io/badge/12/14-grey)![][p086]   | ![](https://img.shields.io/badge/3/4-grey)![][p075]    | ![](https://img.shields.io/badge/4/6-grey)![][p067]    |\n| [iterator](#iterator)               | ![](https://img.shields.io/badge/57/59-grey)![][p097]   |   | ![](https://img.shields.io/badge/1/3-grey)![][p033]    | ![](https://img.shields.io/badge/51/52-grey)![][p098]   | ![](https://img.shields.io/badge/5/5-grey)![][p100]    | ![](https://img.shields.io/badge/2/2-grey)![][p100]    |\n| [memory](#memory)                   | ![](https://img.shields.io/badge/9/44-grey)![][p020]    |   | ![](https://img.shields.io/badge/4/11-grey)![][p036]   | ![](https://img.shields.io/badge/9/35-grey)![][p026]    | ![](https://img.shields.io/badge/0/4-grey)![][p000]    | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |\n| [numbers](#numbers)                 | ![](https://img.shields.io/badge/13/13-grey)![][p100]   |   |                                                        | ![](https://img.shields.io/badge/13/13-grey)![][p100]   |                                                        |                                                        |\n| [numeric](#numeric)                 | ![](https://img.shields.io/badge/1/15-grey)![][p007]    |   | ![](https://img.shields.io/badge/0/9-grey)![][p000]    | ![](https://img.shields.io/badge/0/4-grey)![][p000]     | ![](https://img.shields.io/badge/1/1-grey)![][p100]    | ![](https://img.shields.io/badge/0/5-grey)![][p000]    |\n| [optional](#optional)               | ![](https://img.shields.io/badge/7/7-grey)![][p100]     |   | ![](https://img.shields.io/badge/7/7-grey)![][p100]    |                                                         | ![](https://img.shields.io/badge/1/1-grey)![][p100]    | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |\n| [random](#random)                   | ![](https://img.shields.io/badge/1/1-grey)![][p100]     |   |                                                        | ![](https://img.shields.io/badge/1/1-grey)![][p100]     |                                                        |                                                        |\n| [ranges](#ranges)                   | ![](https://img.shields.io/badge/76/82-grey)![][p093]   |   |                                                        | ![](https://img.shields.io/badge/60/60-grey)![][p100]   | ![](https://img.shields.io/badge/29/36-grey)![][p081]  | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |\n| [span](#span)                       | ![](https://img.shields.io/badge/4/4-grey)![][p100]     |   |                                                        | ![](https://img.shields.io/badge/4/4-grey)![][p100]     | ![](https://img.shields.io/badge/1/1-grey)![][p100]    | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |\n| [string_view](#string_view)         | ![](https://img.shields.io/badge/7/7-grey)![][p100]     |   | ![](https://img.shields.io/badge/4/4-grey)![][p100]    | ![](https://img.shields.io/badge/1/1-grey)![][p100]     | ![](https://img.shields.io/badge/1/1-grey)![][p100]    | ![](https://img.shields.io/badge/3/3-grey)![][p100] *  |\n| [tuple](#tuple)                     | ![](https://img.shields.io/badge/7/8-grey)![][p088]     |   | ![](https://img.shields.io/badge/2/2-grey)![][p100]    |                                                         | ![](https://img.shields.io/badge/2/2-grey)![][p100]    | ![](https://img.shields.io/badge/5/6-grey)![][p083]    |\n| [type_traits](#type_traits)         | ![](https://img.shields.io/badge/17/26-grey)![][p065]   |   | ![](https://img.shields.io/badge/8/10-grey)![][p080]   | ![](https://img.shields.io/badge/7/13-grey)![][p054]    | ![](https://img.shields.io/badge/2/6-grey)![][p033]    | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |\n| [utility](#utility)                 | ![](https://img.shields.io/badge/8/8-grey)![][p100]     |   | ![](https://img.shields.io/badge/2/2-grey)![][p100]    | ![](https://img.shields.io/badge/2/2-grey)![][p100]     | ![](https://img.shields.io/badge/3/3-grey)![][p100]    | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |\n| [variant](#variant)                 | ![](https://img.shields.io/badge/9/9-grey)![][p100]     |   | ![](https://img.shields.io/badge/9/9-grey)![][p100]    |                                                         |                                                        | ![](https://img.shields.io/badge/1/1-grey)![][p100]    |\n|                                     |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n| [atomic](#atomic)                   | ![](https://img.shields.io/badge/0/17-grey)![][p000]    |   |                                                        | ![](https://img.shields.io/badge/0/13-grey)![][p000]    |                                                        | ![](https://img.shields.io/badge/0/4-grey)![][p000]    |\n| [barrier](#barrier)                 | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/5-grey)![][p000]     |                                                        |                                                        |\n| [charconv](#charconv)               | ![](https://img.shields.io/badge/0/5-grey)![][p000]     |   | ![](https://img.shields.io/badge/0/14-grey)![][p000]   |                                                         | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |                                                        |\n| [chrono](#chrono)                   | ![](https://img.shields.io/badge/0/47-grey)![][p000]    |   | ![](https://img.shields.io/badge/0/2-grey)![][p000]    | ![](https://img.shields.io/badge/0/47-grey)![][p000]    |                                                        | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |\n| [cmath](#cmath)                     | ![](https://img.shields.io/badge/0/22-grey)![][p000]    |   | ![](https://img.shields.io/badge/0/22-grey)![][p000]   |                                                         | ![](https://img.shields.io/badge/0/22-grey)![][p000]   |                                                        |\n| [compare](#compare)                 |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n| [coroutine](#coroutine)             | N/A                                                     |   |                                                        |                                                         |                                                        |                                                        |\n| [debugging](#debugging)             | ![](https://img.shields.io/badge/0/3-grey)![][p000]     |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/3-grey)![][p000]    |\n| [exception](#exception)             | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |                                                         |                                                        |                                                        |\n| [execution](#execution)             |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n| [flat_map](#flat_map)               | ![](https://img.shields.io/badge/0/4-grey)![][p000]     |   |                                                        |                                                         | ![](https://img.shields.io/badge/0/4-grey)![][p000]    |                                                        |\n| [flat_set](#flat_set)               | ![](https://img.shields.io/badge/0/2-grey)![][p000]     |   |                                                        |                                                         | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |                                                        |\n| [format](#format)                   | ![](https://img.shields.io/badge/0/24-grey)![][p000]    |   |                                                        | ![](https://img.shields.io/badge/0/16-grey)![][p000]    | ![](https://img.shields.io/badge/0/15-grey)![][p000]   | ![](https://img.shields.io/badge/0/10-grey)![][p000]   |\n| [filesystem](#filesystem)           | N/A                                                     |   |                                                        |                                                         |                                                        |                                                        |\n| [hazard_pointer](#hazard_pointer)   | ![](https://img.shields.io/badge/0/3-grey)![][p000]     |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/3-grey)![][p000]    |\n| [inplace_vector](#inplace_vector)   | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |\n| [latch](#latch)                     | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |                                                        |                                                        |\n| [linalg](#linalg)                   | ![](https://img.shields.io/badge/0/51-grey)![][p000]    |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/51-grey)![][p000]   |\n| [mdspan](#mdspan)                   | ![](https://img.shields.io/badge/0/11-grey)![][p000]    |   |                                                        |                                                         | ![](https://img.shields.io/badge/0/6-grey)![][p000]    | ![](https://img.shields.io/badge/0/5-grey)![][p000]    |\n| [memory_resource](#memory_resource) |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n| [mutex](#mutex)                     | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |                                                         |                                                        |                                                        |\n| [new](#new)                         | ![](https://img.shields.io/badge/0/5-grey)![][p000]     |   | ![](https://img.shields.io/badge/0/4-grey)![][p000]    | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |                                                        |                                                        |\n| [print](#print)                     | ![](https://img.shields.io/badge/0/6-grey)![][p000]     |   |                                                        |                                                         | ![](https://img.shields.io/badge/0/6-grey)![][p000]    |                                                        |\n| [rcu](#rcu)                         | ![](https://img.shields.io/badge/0/6-grey)![][p000]     |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/6-grey)![][p000]    |\n| [semaphore](#semaphore)             | ![](https://img.shields.io/badge/0/2-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/2-grey)![][p000]     |                                                        |                                                        |\n| [shared_mutex](#shared_mutex)       | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |                                                         |                                                        |                                                        |\n| [stop_token](#stop_token)           | ![](https://img.shields.io/badge/0/5-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/5-grey)![][p000]     |                                                        |                                                        |\n| [string](#string)                   | ![](https://img.shields.io/badge/0/3-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/3-grey)![][p000]     | ![](https://img.shields.io/badge/0/1-grey)![][p000]    | ![](https://img.shields.io/badge/0/2-grey)![][p000]    |\n| [source_location](#source_location) | N/A                                                     |   |                                                        |                                                         |                                                        |                                                        |\n| [syncstream](#syncstream)           | ![](https://img.shields.io/badge/0/3-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/3-grey)![][p000]     |                                                        |                                                        |\n| [spanstream](#spanstream)           | ![](https://img.shields.io/badge/0/4-grey)![][p000]     |   |                                                        |                                                         | ![](https://img.shields.io/badge/0/4-grey)![][p000]    |                                                        |\n| [stacktrace](#stacktrace)           | N/A                                                     |   |                                                        |                                                         |                                                        |                                                        |\n| [text_encoding](#text_encoding)     | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   |                                                        |                                                         |                                                        | ![](https://img.shields.io/badge/0/1-grey)![][p000]    |\n| [thread](#thread)                   | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |   |                                                        | ![](https://img.shields.io/badge/0/1-grey)![][p000]     |                                                        |                                                        |\n| [version](#version)                 |                                                         |   |                                                        |                                                         |                                                        |                                                        |\n\n-----\n\n## Detailed status\n\n### Features\nDescription\n* ![](https://img.shields.io/badge/C++XX-C++YY-CCEEFF): C++YY standard implemented in C++XX\n* ![](https://img.shields.io/badge/C++YY-red): C++YY standard, not implemented yet\n* If the implementation is impossible(i.e., needs compiler support / hardware info) it is marked as **N/A**\n* Some features are working in progress\n* **Introduced**: First introduced version\n* **Revision**: Behavior changed/updated version\n\n### Headers\n\n#### `\u003calgorithm\u003e`\n\n  |                                     | Introduced | Revision   |\n  |-------------------------------------|------------|------------|\n  | `search`                            | ![][c98]   | ![][c17no] |\n  | `clamp`                             | ![][c17ok] | ![][c20ok] |\n  | `for_each_n`                        | ![][c17ok] | ![][c20ok] |\n  | `sample`                            | ![][c17no] | ![][c23no] |\n  | `shift_left`                        | ![][c20ok] |            |\n  | `shift_right`                       | ![][c20ok] |            |\n  | `ranges::in_fun_result`             | ![][c20ok] |            |\n  | `ranges::in_in_result`              | ![][c20ok] |            |\n  | `ranges::in_out_result`             | ![][c20ok] |            |\n  | `ranges::in_in_out_result`          | ![][c20ok] |            |\n  | `ranges::in_out_out_result`         | ![][c20ok] |            |\n  | `ranges::min_max_result`            | ![][c20ok] |            |\n  | `ranges::in_found_result`           | ![][c20ok] |            |\n  | `ranges::in_value_result`           | ![][c23ok] |            |\n  | `ranges::out_value_result`          | ![][c23ok] |            |\n  | `ranges::all_of`                    | ![][c20ok] |            |\n  | `ranges::any_of`                    | ![][c20ok] |            |\n  | `ranges::none_of`                   | ![][c20ok] |            |\n  | `ranges::for_each`                  | ![][c20ok] |            |\n  | `ranges::for_each_n`                | ![][c20ok] |            |\n  | `ranges::count`                     | ![][c20ok] | ![][c26ok] |\n  | `ranges::count_if`                  | ![][c20ok] |            |\n  | `ranges::mismatch`                  | ![][c20ok] |            |\n  | `ranges::find`                      | ![][c20ok] | ![][c26ok] |\n  | `ranges::find_if`                   | ![][c20ok] |            |\n  | `ranges::find_if_not`               | ![][c20ok] |            |\n  | `ranges::find_last`                 | ![][c23ok] | ![][c26ok] |\n  | `ranges::find_last_if`              | ![][c23ok] |            |\n  | `ranges::find_last_if_not`          | ![][c23ok] |            |\n  | `ranges::find_end`                  | ![][c20ok] |            |\n  | `ranges::find_first_of`             | ![][c20ok] |            |\n  | `ranges::adjacent_find`             | ![][c20ok] |            |\n  | `ranges::search`                    | ![][c20ok] |            |\n  | `ranges::search_n`                  | ![][c20ok] | ![][c26ok] |\n  | `ranges::contains`                  | ![][c23ok] | ![][c26ok] |\n  | `ranges::contains_subrange`         | ![][c23ok] |            |\n  | `ranges::starts_with`               | ![][c23ok] |            |\n  | `ranges::ends_with`                 | ![][c23no] |            |\n  | `ranges::fold_left`                 | ![][c23ok] | ![][c26no] |\n  | `ranges::fold_left_first`           | ![][c23no] |            |\n  | `ranges::fold_right`                | ![][c23no] | ![][c26no] |\n  | `ranges::fold_right_last`           | ![][c23no] |            |\n  | `ranges::fold_left_with_iter`       | ![][c23no] | ![][c26no] |\n  | `ranges::fold_left_first_with_iter` | ![][c23no] |            |\n  | `ranges::copy`                      | ![][c20ok] |            |\n  | `ranges::copy_if`                   | ![][c20ok] |            |\n  | `ranges::copy_n`                    | ![][c20ok] |            |\n  | `ranges::copy_backward`             | ![][c20ok] |            |\n  | `ranges::move`                      | ![][c20no] |            |\n  | `ranges::move_backward`             | ![][c20no] |            |\n  | `ranges::fill`                      | ![][c20ok] | ![][c26ok] |\n  | `ranges::fill_n`                    | ![][c20ok] | ![][c26ok] |\n  | `ranges::transform`                 | ![][c20no] |            |\n  | `ranges::generate`                  | ![][c20no] |            |\n  | `ranges::generate_n`                | ![][c20no] |            |\n  | `ranges::remove`                    | ![][c20no] | ![][c26no] |\n  | `ranges::remove_if`                 | ![][c20no] |            |\n  | `ranges::remove_copy`               | ![][c20no] | ![][c26no] |\n  | `ranges::remove_copy_if`            | ![][c20no] |            |\n  | `ranges::replace`                   | ![][c20no] | ![][c26no] |\n  | `ranges::replace_if`                | ![][c20no] | ![][c26no] |\n  | `ranges::replace_copy`              | ![][c20no] | ![][c26no] |\n  | `ranges::replace_copy_if`           | ![][c20no] | ![][c26no] |\n  | `ranges::swap_ranges`               | ![][c20ok] |            |\n  | `ranges::reverse`                   | ![][c20no] |            |\n  | `ranges::reverse_copy`              | ![][c20no] |            |\n  | `ranges::rotate`                    | ![][c20no] |            |\n  | `ranges::rotate_copy`               | ![][c20no] |            |\n  | `ranges::shift_left`                | ![][c23no] |            |\n  | `ranges::shift_right`               | ![][c23no] |            |\n  | `ranges::sample`                    | ![][c20no] |            |\n  | `ranges::shuffle`                   | ![][c20no] |            |\n  | `ranges::unique`                    | ![][c20no] |            |\n  | `ranges::unique_copy`               | ![][c20no] |            |\n  | `ranges::is_partitioned`            | ![][c20no] |            |\n  | `ranges::partition`                 | ![][c20no] |            |\n  | `ranges::partition_copy`            | ![][c20no] |            |\n  | `ranges::stable_partition`          | ![][c20no] | ![][c26no] |\n  | `ranges::partition_point`           | ![][c20no] |            |\n  | `ranges::is_sorted`                 | ![][c20no] |            |\n  | `ranges::is_sorted_until`           | ![][c20no] |            |\n  | `ranges::sort`                      | ![][c20ok] |            |\n  | `ranges::partial_sort`              | ![][c20no] |            |\n  | `ranges::partial_sort_copy`         | ![][c20no] |            |\n  | `ranges::stable_sort`               | ![][c20no] | ![][c26no] |\n  | `ranges::nth_element`               | ![][c20no] |            |\n  | `ranges::lower_bound`               | ![][c20no] | ![][c26no] |\n  | `ranges::upper_bound`               | ![][c20no] | ![][c26no] |\n  | `ranges::binary_search`             | ![][c20no] | ![][c26no] |\n  | `ranges::equal_range`               | ![][c20no] | ![][c26no] |\n  | `ranges::merge`                     | ![][c20no] |            |\n  | `ranges::inplace_merge`             | ![][c20no] | ![][c26no] |\n  | `ranges::includes`                  | ![][c20no] |            |\n  | `ranges::set_difference`            | ![][c20no] |            |\n  | `ranges::set_intersection`          | ![][c20ok] |            |\n  | `ranges::set_symmetric_difference`  | ![][c20no] |            |\n  | `ranges::set_union`                 | ![][c20no] |            |\n  | `ranges::is_heap`                   | ![][c20no] |            |\n  | `ranges::is_heap_until`             | ![][c20no] |            |\n  | `ranges::make_heap`                 | ![][c20ok] |            |\n  | `ranges::push_heap`                 | ![][c20no] |            |\n  | `ranges::pop_heap`                  | ![][c20ok] |            |\n  | `ranges::sort_heap`                 | ![][c20ok] |            |\n  | `ranges::max`                       | ![][c20ok] |            |\n  | `ranges::max_element`               | ![][c20ok] |            |\n  | `ranges::min`                       | ![][c20ok] |            |\n  | `ranges::min_element`               | ![][c20ok] |            |\n  | `ranges::minmax`                    | ![][c20ok] |            |\n  | `ranges::minmax_element`            | ![][c20ok] |            |\n  | `ranges::clamp`                     | ![][c20no] |            |\n  | `ranges::equal`                     | ![][c20ok] |            |\n  | `ranges::lexicographical_compare`   | ![][c20ok] |            |\n  | `ranges::is_permutation`            | ![][c20no] |            |\n  | `ranges::next_permutation`          | ![][c20no] |            |\n  | `ranges::prev_permutation`          | ![][c20no] |            |\n\n#### `\u003cany\u003e`\n\n  |                | Introduced  | Revision |\n  |----------------|-------------|----------|\n  | `any`          | ![][c17ok]* |          |\n  | `bad_any_cast` | ![][c17ok]  |          |\n  | `swap(any)`    | ![][c17ok]  |          |\n  | `make_any`     | ![][c17ok]  |          |\n  | `any_cast`     | ![][c17ok]  |          |\n\n* Notes\n  * `preview::any`\n    * `preview::any` is an alias of `std::any` if using C++17 or later to prevent\n      implicit construction of `std::any` from `preview::any` and vice-versa. \n      See [any.h](include/preview/__any/any.h) for more detail.\n\n#### `\u003carray\u003e`\n\n  |            | Introduced | Revision |\n  |------------|------------|----------|\n  | `to_array` | ![][c20ok] |          | \n\n#### `\u003catomic\u003e`\n\n  |                             | Introduced | Revision |\n  |-----------------------------|------------|----------|\n  | `atomic_ref`                | ![][c20no] |          | \n  | `atomic_signed_lock_free`   | ![][c20no] |          | \n  | `atomic_unsigned_lock_free` | ![][c20no] |          | \n  | `atomic_wait`               | ![][c20no] |          | \n  | `atomic_wait_explicit`      | ![][c20no] |          | \n  | `atomic_notify_one`         | ![][c20no] |          | \n  | `atomic_notify_all`         | ![][c20no] |          | \n  | `atomic_flag_test`          | ![][c20no] |          | \n  | `atomic_flag_test_explicit` | ![][c20no] |          | \n  | `atomic_flag_wait`          | ![][c20no] |          | \n  | `atomic_flag_wait_explicit` | ![][c20no] |          | \n  | `atomic_flag_notify_one`    | ![][c20no] |          | \n  | `atomic_flag_notifly_all`   | ![][c20no] |          | \n  | `atomic_fetch_max`          | ![][c26no] |          | \n  | `atomic_fetch_max_explicit` | ![][c26no] |          | \n  | `atomic_fetch_min`          | ![][c26no] |          | \n  | `atomic_fetch_min_explicit` | ![][c26no] |          | \n\n#### `\u003cbarrier\u003e`\n\n  |           | Introduced | Revision |\n  |-----------|------------|----------|\n  | `barrier` | ![][c20no] |          |\n\n#### `\u003cbit\u003e`\n\n  |                  | Introduced | Revision |\n  |------------------|------------|----------|\n  | `endian`         | ![][c20no] |          |\n  | `bit_cast`       | ![][c20ok] |          |\n  | `byteswap`       | ![][c23ok] |          |\n  | `has_single_bit` | ![][c20no] |          |\n  | `bit_ceil`       | ![][c20no] |          |\n  | `bit_floor`      | ![][c20no] |          |\n  | `bit_width`      | ![][c20no] |          |\n  | `rotl`           | ![][c20no] |          |\n  | `rotr`           | ![][c20no] |          |\n  | `countl_zero`    | ![][c20no] |          |\n  | `countl_one`     | ![][c20no] |          |\n  | `countr_zero`    | ![][c20no] |          |\n  | `countr_one`     | ![][c20no] |          |\n  | `popcount`       | ![][c20no] |          |\n\n#### `\u003ccharconv\u003e`\n\n  |                     | Introduced | Revision   |\n  |---------------------|------------|------------|\n  | `chars_format`      | ![][c17no] |            |\n  | `from_chars_result` | ![][c17no] |            |\n  | `to_chars_result`   | ![][c17no] |            |\n  | `from_chars`        | ![][c17no] | ![][c23no] |\n  | `to_chars`          | ![][c17no] | ![][c23no] |\n\n#### `\u003cchrono\u003e`\n\n  |                           | Introduced | Revision                         |\n  |---------------------------|------------|----------------------------------|\n  | `std::chrono::duration`   | ![][c11]   | ![][c17no] ![][c20no] ![][c26no] |\n  | `std::chrono::time_point` | ![][c11]   | ![][c17no] ![][c20no] ![][c26no] |\n  | `clock_time_conversion`   | ![][c20no] |                                  |\n  | `is_clock`                | ![][c20no] |                                  |\n  | `utc_clock`               | ![][c20no] |                                  |\n  | `tai_clock`               | ![][c20no] |                                  |\n  | `gps_clock`               | ![][c20no] |                                  |\n  | `file_clock`              | ![][c20no] |                                  |\n  | `local_t`                 | ![][c20no] |                                  |\n  | `last_spec`               | ![][c20no] |                                  |\n  | `day`                     | ![][c20no] |                                  |\n  | `month`                   | ![][c20no] |                                  |\n  | `year`                    | ![][c20no] |                                  |\n  | `weekday`                 | ![][c20no] |                                  |\n  | `weekday_indexed`         | ![][c20no] |                                  |\n  | `weekday_last`            | ![][c20no] |                                  |\n  | `month_day`               | ![][c20no] |                                  |\n  | `month_day_last`          | ![][c20no] |                                  |\n  | `month_weekday`           | ![][c20no] |                                  |\n  | `month_weekday_last`      | ![][c20no] |                                  |\n  | `year_month`              | ![][c20no] |                                  |\n  | `year_month_day`          | ![][c20no] |                                  |\n  | `year_month_day_last`     | ![][c20no] |                                  |\n  | `year_month_weekday`      | ![][c20no] |                                  |\n  | `year_month_weekday_last` | ![][c20no] |                                  |\n  | `hh_mm_ss`                | ![][c20no] |                                  |\n  | `tzdb`                    | ![][c20no] |                                  |\n  | `tzdb_list`               | ![][c20no] |                                  |\n  | `tzdb_zone`               | ![][c20no] |                                  |\n  | `get_tzdb`                | ![][c20no] |                                  |\n  | `get_tzdb_list`           | ![][c20no] |                                  |\n  | `reload_tzdb`             | ![][c20no] |                                  |\n  | `remote_version`          | ![][c20no] |                                  |\n  | `locate_zone`             | ![][c20no] |                                  |\n  | `sys_info`                | ![][c20no] |                                  |\n  | `local_info`              | ![][c20no] |                                  |\n  | `choose`                  | ![][c20no] |                                  |\n  | `zoned_traits`            | ![][c20no] |                                  |\n  | `zoned_time`              | ![][c20no] |                                  |\n  | `time_zone_link`          | ![][c20no] |                                  |\n  | `nonexistent_local_time`  | ![][c20no] |                                  |\n  | `ambiguous_local_time`    | ![][c20no] |                                  |\n  | `leap_second`             | ![][c20no] |                                  |\n  | `leap_second_info`        | ![][c20no] |                                  |\n  | `get_leap_second_info`    | ![][c20no] |                                  |\n  | `is_am`\u003cbr/\u003e`is_pm`       | ![][c20no] |                                  |\n  | `make_12`\u003cbr/\u003e`make_24`   | ![][c20no] |                                  |\n\n#### `\u003ccmath\u003e`\n\n  |                  | Introduced | Revision   |\n  |------------------|------------|------------|\n  | `assoc_laguerre` | ![][c17no] | ![][c23no] |\n  | `assoc_legendre` | ![][c17no] | ![][c23no] |\n  | `beta`           | ![][c17no] | ![][c23no] |\n  | `comp_ellint_1`  | ![][c17no] | ![][c23no] |\n  | `comp_ellint_2`  | ![][c17no] | ![][c23no] |\n  | `comp_ellint_3`  | ![][c17no] | ![][c23no] |\n  | `cyl_bessel_i`   | ![][c17no] | ![][c23no] |\n  | `cyl_bessel_j`   | ![][c17no] | ![][c23no] |\n  | `cyl_bessel_k`   | ![][c17no] | ![][c23no] |\n  | `cyl_neumann`    | ![][c17no] | ![][c23no] |\n  | `ellint_1`       | ![][c17no] | ![][c23no] |\n  | `ellint_2`       | ![][c17no] | ![][c23no] |\n  | `ellint_3`       | ![][c17no] | ![][c23no] |\n  | `expint`         | ![][c17no] | ![][c23no] |\n  | `hermite`        | ![][c17no] | ![][c23no] |\n  | `legendre`       | ![][c17no] | ![][c23no] |\n  | `laguerre`       | ![][c17no] | ![][c23no] |\n  | `riemann_zeta`   | ![][c17no] | ![][c23no] |\n  | `sph_bessel`     | ![][c17no] | ![][c23no] |\n  | `sph_legendre`   | ![][c17no] | ![][c23no] |\n  | `sph_neumann`    | ![][c17no] | ![][c23no] |\n  | `hypot(x, y, z)` | ![][c17no] | ![][c26no] |\n\n#### `\u003ccompare\u003e`\n  N/A\n\n#### `\u003cconcepts\u003e`\n\n  |                            | Introduced | Revision   |\n  |----------------------------|------------|------------|\n  | `same_as`                  | ![][c20ok] |            |\n  | `derived_from`             | ![][c20ok] |            |\n  | `convertible_to`           | ![][c20ok] |            |\n  | `common_reference_with`    | ![][c20ok] |            |\n  | `common_with`              | ![][c20ok] |            |\n  | `integral`                 | ![][c20ok] |            |\n  | `signed_integral`          | ![][c20ok] |            |\n  | `unsigned_integral`        | ![][c20ok] |            |\n  | `floating_point`           | ![][c20ok] |            |\n  | `assignable_from`          | ![][c20ok] |            |\n  | `swappable`                | ![][c20ok] |            |\n  | `destructible`             | ![][c20ok] |            |\n  | `constructible_from`       | ![][c20ok] |            |\n  | `default_initializable`    | ![][c20ok] |            |\n  | `move_constructible`       | ![][c20ok] |            |\n  | `copy_constructible`       | ![][c20ok] |            |\n  | `equality_comparable`      | ![][c20ok] |            |\n  | `equality_comparable_with` | ![][c20ok] | ![][c23ok] |\n  | `totally_ordered`          | ![][c20ok] |            |\n  | `movable`                  | ![][c20ok] |            |\n  | `copyable`                 | ![][c20ok] |            |\n  | `semiregular`              | ![][c20ok] |            |\n  | `regular`                  | ![][c20ok] |            |\n  | `invocable`                | ![][c20ok] |            |\n  | `regular_invocable`        | ![][c20ok] |            |\n  | `predicate`                | ![][c20ok] |            |\n  | `relation`                 | ![][c20ok] |            |\n  | `equivalence_relation`     | ![][c20ok] |            |\n  | `strict_weak_order`        | ![][c20ok] |            |\n  | `ranges::swap`             | ![][c20ok] |            |\n\n#### `\u003ccoroutine\u003e`\n  N/A\n\n#### `\u003ccstddef\u003e`\n\n  |              | Introduced | Revision |\n  |--------------|------------|----------|\n  | `byte`       | ![][c17ok] |          |\n  | `to_integer` | ![][c17ok] |          |\n\n#### `\u003cdebugging\u003e`\n\n  |                           | Introduced | Revision |\n  |---------------------------|------------|----------|\n  | `breakpoint`              | ![][c26no] |          |\n  | `breakpoint_if_debugging` | ![][c26no] |          |\n  | `is_debugger_present`     | ![][c26no] |          |\n\n#### `\u003cexception\u003e`\n\n  |                       | Introduced       | Revision |\n  |-----------------------|------------------|----------|\n  | `uncaught_exceptions` | ![][c17no] (N/A) |          |\n\n#### `\u003cexpected\u003e`\n\n  |                             | Introduced | Revision |\n  |-----------------------------|------------|----------|\n  | `expected`                  | ![][c23ok] |          |\n  | `unexpected`                | ![][c23ok] |          |\n  | `bad_expected_access`       | ![][c23ok] |          |\n  | `unexpect`\u003cbr/\u003e`unexpect_t` | ![][c23ok] |          |\n\n#### `\u003cexecution\u003e`\n  N/A\n\n#### `\u003cflat_map\u003e`\n\n  |                                               | Introduced | Revision |\n  |-----------------------------------------------|------------|----------|\n  | `flat_map`                                    | ![][c23no] |          |\n  | `flat_multimap`                               | ![][c23no] |          |\n  | `sorted_unique`\u003cbr/\u003e`sorted_unique_t`         | ![][c23no] |          |\n  | `sorted_equivalent`\u003cbr/\u003e`sorted_equivalent_t` | ![][c23no] |          |\n\n#### `\u003cflat_set\u003e`\n\n  |                 | Introduced | Revision |\n  |-----------------|------------|----------|\n  | `flat_set`      | ![][c23no] |          |\n  | `flat_multiset` | ![][c23no] |          |\n\n#### `\u003cformat\u003e`\n\n  |                                            | Introduced | Revision              |\n  |--------------------------------------------|------------|-----------------------|\n  | `formatter`                                | ![][c20no] | ![][c23no]            |\n  | `basic_format_parse_context`               | ![][c20no] | ![][c26no]            |\n  | `basic_format_context`                     | ![][c20no] |                       |\n  | `basic_format_arg`                         | ![][c20no] | ![][c26no]            |\n  | `basic_format_args`                        | ![][c20no] |                       |\n  | `basic_format_string`                      | ![][c20no] | ![][c23no] ![][c26no] |\n  | `format_error`                             | ![][c20no] |                       |\n  | `format`                                   | ![][c20no] | ![][c23no] ![][c26no] |\n  | `format_to`                                | ![][c20no] | ![][c23no] ![][c26no] |\n  | `format_to_n`                              | ![][c20no] | ![][c23no] ![][c26no] |\n  | `formatted_size`                           | ![][c20no] | ![][c23no] ![][c26no] |\n  | `vformat`                                  | ![][c20no] | ![][c23no] ![][c26no] |\n  | `vformat_to`                               | ![][c20no] | ![][c23no] ![][c26no] |\n  | ~~`visit_format_arg`~~                     | ![][c20no] | deprecated in C++26   |\n  | `make_format_args`                         | ![][c20no] |                       |\n  | `make_wformat_args`                        | ![][c20no] |                       |\n  | `formattable`                              | ![][c23no] |                       |\n  | `range_format`                             | ![][c23no] |                       |\n  | `range_formatter`                          | ![][c23no] |                       |\n  | `formatter\u003cpair-or-tuple\u003e`                 | ![][c23no] |                       |\n  | `formatter\u003crange\u003e`                         | ![][c23no] |                       |\n  | `format_kind`                              | ![][c23no] |                       |\n  | `enable_nonlocking_formatter_optimization` | ![][c23no] |                       |\n  | `runtime_format`                           | ![][c26no] |                       |\n\n#### `\u003cfilesystem\u003e`\n  N/A\n\n#### `\u003cfunctional\u003e`\n\n  |                                 | Introduced | Revision                                      |\n  |---------------------------------|------------|-----------------------------------------------|\n  | `reference_wrapper`             |            | ![][c17ok] ![][c20ok] ![][c23ok] ![][c26ok] * |\n  | `default_searcher`              | ![][c17ok] | ![][c20ok]                                    |\n  | `boyer_moore_searcher`          | ![][c17no] |                                               |\n  | `boyer_moore_horspool_searcher` | ![][c17no] |                                               |\n  | `invoke`                        | ![][c17ok] |                                               |\n  | `not_fn`                        | ![][c17ok] | ![][c26ok]                                    |\n  | `bind_front`                    | ![][c20ok] | ![][c26ok17]                                  |\n  | `identity`                      | ![][c20ok] |                                               |\n  | `unwrap_reference`              | ![][c20ok] |                                               |\n  | `unwrap_ref_decay`              | ![][c20ok] |                                               |\n  | `ranges::equal_to`              | ![][c20ok] |                                               |\n  | `ranges::not_equal_to`          | ![][c20ok] |                                               |\n  | `ranges::greater`               | ![][c20ok] |                                               |\n  | `ranges::less`                  | ![][c20ok] |                                               |\n  | `ranges::greater_equal`         | ![][c20ok] |                                               |\n  | `ranges::less_equal`            | ![][c20ok] |                                               |\n  | `compare_three_way`             | ![][c20no] |                                               |\n  | `ranges::three_way`             | ![][c20no] |                                               |\n  | `invoke_r`                      | ![][c23ok] |                                               |\n  | `bind_back`                     | ![][c23ok] | ![][c26ok17]                                  |\n  | `move_only_function`            | ![][c23no] |                                               |\n  | `copyable_function`             | ![][c26no] |                                               |\n  | `function_ref`                  | ![][c26no] |                                               |\n\n* Notes\n  * `reference_wrapper`\n    * Non-standard member function `operator*()` is defined _**only for the purpose of mixed use with**_ `std::invoke`.\n    * Before C++20, `preview::reference_wrapper` cannot be used in deduced context of `std::reference_wrapper`. In sucn\n      case, non-standard member function `to_std()` can be used.\n      ```c++\n      template\u003ctypename T\u003e\n      void foo(std::reference_wrapper\u003cT\u003e x) {}\n      \n      int main() {\n        int x = 10;\n        auto ref = preview::ref(x);\n        foo(ref); // Compile error before C++20\n        foo(ref.to_std());\n      \n        std::cout \u003c\u003c std::boolalpha \u003c\u003c (ref == 10) \u003c\u003c std::endl;\n      }\n      ```\n\n\n#### `\u003chazard_pointer\u003e`\n\n  |                           | Introduced | Revision |\n  |---------------------------|------------|----------|\n  | `hazard_pointer_obj_base` | ![][c26no] |          |\n  | `hazard_pointer`          | ![][c26no] |          |\n  | `make_hazard_pointer`     | ![][c26no] |          |\n\n#### `\u003cinplace_vector\u003e`\n\n  |                       | Introduced | Revision |\n  |-----------------------|------------|----------|\n  | `inplace_vector`      | ![][c26no] |          |\n\n#### `\u003citerator\u003e`\n\n  |                                                     | Introduced   | Revision    |\n  |-----------------------------------------------------|--------------|-------------|\n  | `contiguous_iterator_tag`                           | ![][c20ok] * |             |\n  | `indirectly_readable`                               | ![][c20ok]   |             |\n  | `indirectly_writable`                               | ![][c20ok]   |             |\n  | `weakly_incrementable`                              | ![][c20ok]   |             |\n  | `incrementable`                                     | ![][c20ok]   |             |\n  | `input_or_output_iterator`                          | ![][c20ok]   |             |\n  | `sentinel_for`                                      | ![][c20ok]   |             |\n  | `sized_sentinel_for`                                | ![][c20ok]   |             |\n  | `input_iterator`                                    | ![][c20ok]   |             |\n  | `output_iterator`                                   | ![][c20ok]   |             |\n  | `forward_iterator`                                  | ![][c20ok]   |             |\n  | `bidirectional_iterator`                            | ![][c20ok]   |             |\n  | `random_access_iterator`                            | ![][c20ok]   |             |\n  | `contiguous_iterator`                               | ![][c20ok] * |             |\n  | `indirectly_unary_invocable`                        | ![][c20ok]   |             |\n  | `indirectly_regular_unary_invocable`                | ![][c20ok]   |             |\n  | `indirect_unary_predicate`                          | ![][c20ok]   |             |\n  | `indirect_binary_predicate`                         | ![][c20ok]   |             |\n  | `indirect_equivalence_relation`                     | ![][c20ok]   |             |\n  | `indirect_strict_weak_order`                        | ![][c20ok]   |             |\n  | `indirectly_movable`                                | ![][c20ok]   |             |\n  | `indirectly_movable_storable`                       | ![][c20ok]   |             |\n  | `indirectly_copyable`                               | ![][c20ok]   |             |\n  | `indirectly_copyable_storable`                      | ![][c20ok]   |             |\n  | `indirectly_swappable`                              | ![][c20ok]   |             |\n  | `indirectly_comparable`                             | ![][c20ok]   |             |\n  | `permutable`                                        | ![][c20ok]   |             |\n  | `mergeable`                                         | ![][c20ok]   |             |\n  | `sortable`                                          | ![][c20ok]   |             |\n  | `indirect_result_t`                                 | ![][c20ok]   |             |\n  | `projected`                                         | ![][c20ok]   | ![][c26ok]* |\n  | `projected_value_t`                                 | ![][c26ok]   |             |\n  | `incrementable_traits`                              | ![][c20ok]   |             |\n  | `indirectly_readable_traits`                        | ![][c20ok]   |             |\n  | `iter_value_t`\u003cbr/\u003e`iter_reference_t`               | ![][c20ok]   |             |\n  | `iter_const_reference_t`                            | ![][c23ok]   |             |\n  | `iter_difference_t`                                 | ![][c20ok]   |             |\n  | `iter_rvalue_reference_t`                           | ![][c20ok]   |             |\n  | `iter_common_reference_t`                           | ![][c20ok]   |             |\n  | `iterator_traits`                                   | ![][c98]     | ![][c20ok]  |\n  | `move_sentinel`                                     | ![][c20ok]   |             |\n  | `basic_const_iterator`                              | ![][c23ok]   |             |\n  | `const_iterator`                                    | ![][c23ok]   |             |\n  | `const_sentinel`                                    | ![][c23ok]   |             |\n  | `common_iterator`                                   | ![][c20ok]   |             |\n  | `default_sentinel_t`\u003cbr/\u003e`default_sentinel`         | ![][c20ok]   |             |\n  | `counted_iterator`                                  | ![][c20ok]   |             |\n  | `unreachable_sentinel_t`\u003cbr/\u003e`unreachable_sentinel` | ![][c20ok]   |             |\n  | `iter_move`                                         | ![][c20ok]   |             |\n  | `iter_swap`                                         | ![][c20ok]   |             |\n  | `make_const_iterator`\u003cbr/\u003e`make_const_sentinel`     | ![][c23ok]   |             |\n  | `ranges::advance`                                   | ![][c20ok]   |             |\n  | `ranges::distance`                                  | ![][c20ok]   |             |\n  | `ranges::next`                                      | ![][c20ok]   |             |\n  | `ranges::prev`                                      | ![][c20ok]   |             |\n  | `size(C)`                                           | ![][c17ok]   | ![][c20ok]  |\n  | `ssize(C)`                                          | ![][c20ok]   |             |\n  | `empty(C)`                                          | ![][c17no]   | ![][c20no]  |\n  | `data(C)`                                           | ![][c17no]   |             |\n\n  * Notes\n    * `contiguous_iterator_tag`\n      * Alias to `std::contiguous_iterator_tag` if defined, `preview::detail::pseudo_contiguous_iterator_tag` otherwise.\n    \u003cbr/\u003e\u003cbr/\u003e\n    * `contiguous_iterator\u003cI\u003e` \n      * May incorrectly evaluates to `true` for some `random_access_iterator` if \n        `I::iterator_category` does not satisfy `derived_from\u003ccontiguous_iterator_tag\u003e`(typically before C++20)\n      * Following pre-C++20 iterators explicitly evaluates to `false`\n        * `std::vector\u003cbool\u003e::xxx_iterator`\n        * `std::deque\u003cT\u003e::xxx_iterator`\n      \u003cbr/\u003e\u003cbr/\u003e\n    * `projected`\n      * Indirect layer doesn't work without using concepts. \n        Check `preview::projectable` before using `preview::projected` directly.\n\n#### `\u003clatch\u003e`\n\n  |         | Introduced | Revision |\n  |---------|------------|----------|\n  | `latch` | ![][c20no] |          |\n\n#### `\u003clinalg\u003e`\n\n  |                                                         | Introduced | Revision |\n  |---------------------------------------------------------|------------|----------|\n  | `layout_blas_packed`                                    | ![][c26no] |          |\n  | `scaled_accessor`                                       | ![][c26no] |          |\n  | `conjugated_accessor`                                   | ![][c26no] |          |\n  | `layout_transpose`                                      | ![][c26no] |          |\n  | `column_major`\u003cbr/\u003e`column_major_t`                     | ![][c26no] |          |\n  | `row_major`\u003cbr/\u003e`row_major_t`                           | ![][c26no] |          |\n  | `upper_triangle`\u003cbr/\u003e`upper_triangle_t`                 | ![][c26no] |          |\n  | `lower_triangle`\u003cbr/\u003e`lower_triangle_t`                 | ![][c26no] |          |\n  | `implicit_unit_diagonal`\u003cbr/\u003e`implicit_unit_diagonal_t` | ![][c26no] |          |\n  | `explicit_unit_diagonal`\u003cbr/\u003e`explicit_unit_diagonal_t` | ![][c26no] |          |\n  | `scaled`                                                | ![][c26no] |          |\n  | `conjugated`                                            | ![][c26no] |          |\n  | `transposed`                                            | ![][c26no] |          |\n  | `conjugated_transposed`                                 | ![][c26no] |          |\n  | `setup_givens_rotation`                                 | ![][c26no] |          |\n  | `apply_givens_rotation`                                 | ![][c26no] |          |\n  | `swap_elements`                                         | ![][c26no] |          |\n  | `scale`                                                 | ![][c26no] |          |\n  | `copy`                                                  | ![][c26no] |          |\n  | `add`                                                   | ![][c26no] |          |\n  | `dot`\u003cbr/\u003e`dotc`                                        | ![][c26no] |          |\n  | `vector_sum_of_squares`                                 | ![][c26no] |          |\n  | `vector_two_norm`                                       | ![][c26no] |          |\n  | `vector_abs_sum`                                        | ![][c26no] |          |\n  | `vector_idx_abs_max`                                    | ![][c26no] |          |\n  | `matrix_frob_norm`                                      | ![][c26no] |          |\n  | `matrix_one_norm`                                       | ![][c26no] |          |\n  | `matrix_inf_norm`                                       | ![][c26no] |          |\n  | `matrix_vector_product`                                 | ![][c26no] |          |\n  | `symmetric_matrix_vector_product`                       | ![][c26no] |          |\n  | `hermitian_matrix_vector_product`                       | ![][c26no] |          |\n  | `triangular_matrix_vector_product`                      | ![][c26no] |          |\n  | `triangular_matrix_vector_solve`                        | ![][c26no] |          |\n  | `matrix_rank_1_update`                                  | ![][c26no] |          |\n  | `matrix_rank_1_update_c`                                | ![][c26no] |          |\n  | `symmetric_matrix_rank_1_update`                        | ![][c26no] |          |\n  | `hermitian_matrix_rank_1_update`                        | ![][c26no] |          |\n  | `symmetric_matrix_rank_2_update`                        | ![][c26no] |          |\n  | `hermitian_matrix_rank_2_update`                        | ![][c26no] |          |\n  | `matrix_product`                                        | ![][c26no] |          |\n  | `symmetric_matrix_product`                              | ![][c26no] |          |\n  | `hermitian_matrix_product`                              | ![][c26no] |          |\n  | `triangular_matrix_product`                             | ![][c26no] |          |\n  | `triangular_matrix_left_product`                        | ![][c26no] |          |\n  | `triangular_matrix_right_product`                       | ![][c26no] |          |\n  | `symmetric_matrix_rank_k_update`                        | ![][c26no] |          |\n  | `hermitian_matrix_rank_k_update`                        | ![][c26no] |          |\n  | `symmetric_matrix_rank_2k_update`                       | ![][c26no] |          |\n  | `hermitian_matrix_rank_2k_update`                       | ![][c26no] |          |\n  | `triangular_matrix_matrix_left_solve`                   | ![][c26no] |          |\n  | `triangular_matrix_matrix_right_solve`                  | ![][c26no] |          |\n\n#### `\u003cmdspan\u003e`\n\n  |                                   | Introduced | Revision |\n  |-----------------------------------|------------|----------|\n  | `mdspan`                          | ![][c23no] |          |\n  | `extents`                         | ![][c23no] |          |\n  | `layout_left`                     | ![][c23no] |          |\n  | `layout_right`                    | ![][c23no] |          |\n  | `layout_stride`                   | ![][c23no] |          |\n  | `layout_stride`                   | ![][c23no] |          |\n  | `submdspan`                       | ![][c26no] |          |\n  | `submdspan_extents`               | ![][c26no] |          |\n  | `strided_slice`                   | ![][c26no] |          |\n  | `submdspan_mapping_result`        | ![][c26no] |          |\n  | `full_extent`\u003cbr/\u003e`full_extent_t` | ![][c26no] |          |\n\n#### `\u003cmemory\u003e`\n\n  |                                                   | Introduced  | Revision   |\n  |---------------------------------------------------|-------------|------------|\n  | `pointer_traits`                                  | ![][c11]    | ![][c20ok] |\n  | `aligned_alloc`                                   | ![][c17no]  |            |\n  | `destroy_at`                                      | ![][c17ok]  | ![][c20ok] |\n  | `destroy`                                         | ![][c17ok]  | ![][c20ok] |\n  | `destroy_n`                                       | ![][c17ok]  | ![][c20ok] |\n  | `xxx_pointer_cast`                                | ![][c17ok]  | ![][c20ok] |\n  | `uninitialized_default_construct`                 | ![][c17no]  | ![][c20no] |\n  | `uninitialized_default_construct_n`               | ![][c17no]  | ![][c20no] |\n  | `uninitialized_move`                              | ![][c17no]  | ![][c20no] |\n  | `uninitialized_move_n`                            | ![][c17no]  | ![][c20no] |\n  | `uninitialized_value_construct`                   | ![][c17no]  |            |\n  | `uninitialized_value_construct_n`                 | ![][c17no]  |            |\n  | `atomic\u003cshared_ptr\u003e`                              | ![][c20no]  |            |\n  | `atomic\u003cunique_ptr\u003e`                              | ![][c20no]  |            |\n  | `assume_aligned`                                  | ![][c20no]  |            |\n  | `construct_at`                                    | ![][c20ok]  |            |\n  | `make_shared_for_overwrite`                       | ![][c20no]  |            |\n  | `make_unique_for_overwrite`                       | ![][c20no]  |            |\n  | `allocate_shared_for_overwrite`                   | ![][c20no]  |            |\n  | `to_address`                                      | ![][c20ok]* |            |\n  | `uses_allocator_construction_args`                | ![][c20ok]  |            |\n  | `make_obj_using_allocator`                        | ![][c20ok]  |            |\n  | `uninitialized_construct_using_allocator`         | ![][c20no]  |            |\n  | `operator\u003c\u003c(std::unique_ptr)`                     | ![][c20no]  |            |\n  | `ranges::construct_at`                            | ![][c20no]  |            |\n  | `ranges::destroy`                                 | ![][c20no]  |            |\n  | `ranges::destroy_n`                               | ![][c20no]  |            |\n  | `ranges::destroy_at`                              | ![][c20no]  |            |\n  | `ranges::uninitialized_copy`                      | ![][c20no]  |            |\n  | `ranges::uninitialized_copy_n`                    | ![][c20no]  |            |\n  | `ranges::uninitialized_fill`                      | ![][c20no]  |            |\n  | `ranges::uninitialized_fill_n`                    | ![][c20no]  |            |\n  | `ranges::uninitialized_move`                      | ![][c20no]  |            |\n  | `ranges::uninitialized_move_n`                    | ![][c20no]  |            |\n  | `ranges::uninitialized_default_construct`         | ![][c20no]  |            |\n  | `ranges::uninitialized_default_construct_n`       | ![][c20no]  |            |\n  | `ranges::uninitialized_value_construct`           | ![][c20no]  |            |\n  | `ranges::uninitialized_value_construct_n`         | ![][c20no]  |            |\n  | `allocation_result`                               | ![][c23no]  |            |\n  | `inout_ptr`\u003cbr/\u003e`inout_ptr_t`                     | ![][c23no]  |            |\n  | `out_ptr`\u003cbr/\u003e`out_ptr_t`                         | ![][c23no]  |            |\n  | `start_lifetime_as`\u003cbr/\u003e`start_lifetime_as_array` | ![][c23no]  |            |\n  | `owner_hash`                                      | ![][c26no]  |            |\n  | `owner_equal`                                     | ![][c26no]  |            |\n\n* Notes\n  * `to_address`\n    * If `std::pointer_traits::to_address` is available, it is used before `preview::pointer_traits::to_address`.\n      * ⚠️ `std::pointer_traits::to_address` is not sfinae-friendly until MSVC 2022, so not used.\n\n#### `\u003cmemory_resource\u003e`\n  N/A\n\n#### `\u003cmutex\u003e`\n\n  |               | Introduced | Revision |\n  |---------------|------------|----------|\n  | `scoped_lock` | ![][c17no] |          |\n\n#### `\u003cnew\u003e`\n\n  |                                              | Introduced | Revision |\n  |----------------------------------------------|------------|----------|\n  | `align_val_t`                                | ![][c17no] |          |\n  | `hardware_destructive_interference_size`     | ![][c17no] |          |\n  | `hardware_constructive_interference_size`    | ![][c17no] |          |\n  | `launder`                                    | ![][c17no] |          |\n  | `destroying_delete`\u003cbr\u003e`destroying_delete_t` | ![][c20no] |          |\n\n#### `\u003cnumbers\u003e`\n\n  |              | Introduced | Revision |\n  |--------------|------------|----------|\n  | `e`          | ![][c20ok] |          |\n  | `log2e`      | ![][c20ok] |          |\n  | `log10e`     | ![][c20ok] |          |\n  | `pi`         | ![][c20ok] |          |\n  | `inv_pi`     | ![][c20ok] |          |\n  | `inv_sqrtpi` | ![][c20ok] |          |\n  | `ln2`        | ![][c20ok] |          |\n  | `ln10`       | ![][c20ok] |          |\n  | `sqrt2`      | ![][c20ok] |          |\n  | `sqrt3`      | ![][c20ok] |          |\n  | `inv_sqrt3`  | ![][c20ok] |          |\n  | `egamma`     | ![][c20ok] |          |\n  | `phi`        | ![][c20ok] |          |\n\n#### `\u003cnumeric\u003e`\n\n  |                            | Introduced | Revision   |\n  |----------------------------|------------|------------|\n  | `exclusive_scan`           | ![][c17no] | ![][c20no] |\n  | `transform_exclusive_scan` | ![][c17no] | ![][c20no] |\n  | `inclusive_scan`           | ![][c17no] | ![][c20no] |\n  | `transform_inclusive_scan` | ![][c17no] | ![][c20no] |\n  | `gcd`                      | ![][c17no] |            |\n  | `lcm`                      | ![][c17no] |            |\n  | `reduce`                   | ![][c17no] |            |\n  | `transform_reduce`         | ![][c17no] |            |\n  | `midpoint`                 | ![][c17no] |            |\n  | `ranges::iota`             | ![][c23ok] |            |\n  | `add_sat`                  | ![][c26no] |            |\n  | `sub_sat`                  | ![][c26no] |            |\n  | `mul_sat`                  | ![][c26no] |            |\n  | `div_sat`                  | ![][c26no] |            |\n  | `saturate_cast`            | ![][c26no] |            |\n\n#### `\u003cprint\u003e`\n\n  |                              | Introduced | Revision |\n  |------------------------------|------------|----------|\n  | `print`                      | ![][c23no] |          |\n  | `println`                    | ![][c23no] |          |\n  | `vprint_unicode`             | ![][c23no] |          |\n  | `vprint_unicode_buffered`    | ![][c23no] |          |\n  | `vprint_nonunicode`          | ![][c23no] |          |\n  | `vprint_nonunicode_buffered` | ![][c23no] |          |\n\n#### `\u003coptional\u003e`\n\n  |                       | Introduced  | Revision               |\n  |-----------------------|-------------|------------------------|\n  | `optional`            | ![][c17ok]  | ![][c23ok] ![][c26ok]* |\n  | `bad_optional_access` | ![][c17ok]  |                        |\n  | `std::hash\u003coptional\u003e` | ![][c17ok]  |                        |\n  | `nullopt`             | ![][c17ok]* |                        |\n  | `nullopt_t`           | ![][c17ok]* |                        |\n  | `swap(optional)`      | ![][c17ok]  |                        |\n  | `make_optional`       | ![][c17ok]  |                        |\n\n* Notes\n  * `nullopt`, `nullopt_t`\n    * `std::nullopt` is used if available, `preview::nullopt` otherwise.\n  * C++26\n    * [P3168 (R2)](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3168r2.html)\n\n#### `\u003crandom\u003e`\n\n  |                                | Introduced | Revision |\n  |--------------------------------|------------|----------|\n  | `uniform_random_bit_generator` | ![][c20ok] |          |\n\n#### `\u003cranges\u003e`\n\n  |                                                                   | Introduced   | Revision   |\n  |-------------------------------------------------------------------|--------------|------------|\n  | `ranges::range`                                                   | ![][c20ok]   |            |\n  | `ranges::borrowed_range`                                          | ![][c20ok]   |            |\n  | `ranges::sized_range`                                             | ![][c20ok]   |            |\n  | `ranges::view`                                                    | ![][c20ok]   |            |\n  | `ranges::input_range`                                             | ![][c20ok]   |            |\n  | `ranges::output_range`                                            | ![][c20ok]   |            |\n  | `ranges::forward_range`                                           | ![][c20ok]   |            |\n  | `ranges::bidirectional_range`                                     | ![][c20ok]   |            |\n  | `ranges::random_access_range`                                     | ![][c20ok]   |            |\n  | `ranges::contiguous_range`                                        | ![][c20ok]   |            |\n  | `ranges::common_range`                                            | ![][c20ok]   |            |\n  | `ranges::viewable_range`                                          | ![][c20ok]   |            |\n  | `ranges::constant_range`                                          | ![][c23ok]   |            |\n  | `ranges::to`                                                      | ![][c23ok] * |            |\n  | `ranges::iterator_t`                                              | ![][c20ok]   |            |\n  | `ranges::const_iterator_t`                                        | ![][c23ok]   |            |\n  | `ranges::sentinel_t`                                              | ![][c20ok]   |            |\n  | `ranges::const_sentinel_t`                                        | ![][c23ok]   |            |\n  | `ranges::range_difference_t`                                      | ![][c20ok]   |            |\n  | `ranges::range_size_t`                                            | ![][c20ok]   |            |\n  | `ranges::range_value_t`                                           | ![][c20ok]   |            |\n  | `ranges::range_refernce_t`                                        | ![][c20ok]   |            |\n  | `ranges::range_const_reference_t`                                 | ![][c23ok]   |            |\n  | `ranges::range_rvalue_reference_t`                                | ![][c20ok]   |            |\n  | `ranges::range_common_reference_t`                                | ![][c20ok]   |            |\n  | `ranges::view_interface`                                          | ![][c20ok]   | ![][c23ok] |\n  | `ranges::subrange`                                                | ![][c20ok]   | ![][c23ok] |\n  | `ranges::dangling`                                                | ![][c20ok]   |            |\n  | `ranges::borrowed_iterator_t`                                     | ![][c20ok]   |            |\n  | `ranges::borrowed_subrange_t`                                     | ![][c20ok]   |            |\n  | `ranges::range_adaptor_closure`                                   | ![][c23ok]   |            |\n  | `ranges::empty_view`\u003cbr/\u003e`views::empty`                           | ![][c20ok]   |            |\n  | `ranges::single_view`\u003cbr/\u003e`views::single`                         | ![][c20ok]   |            |\n  | `ranges::iota_view`\u003cbr/\u003e`views::iota`                             | ![][c20ok]   |            |\n  | `ranges::iota_view`\u003cbr/\u003e`views::iota`                             | ![][c20ok]   |            |\n  | `ranges::basic_istream_view`\u003cbr/\u003e`views::istream`                 | ![][c20ok]   |            |\n  | `ranges::repeat_view`\u003cbr/\u003e`views::repeat`                         | ![][c23ok]   |            |\n  | `ranges::cartesian_product_view`\u003cbr/\u003e`views::cartesian_product`   | ![][c23ok]   |            |\n  | `views::all_t`\u003cbr/\u003e`views::all`                                   | ![][c20ok]   |            |\n  | `ranges::ref_view`                                                | ![][c20ok]   |            |\n  | `ranges::owning_view`                                             | ![][c20ok]   |            |\n  | `ranges::filter_view`\u003cbr/\u003e`views::filter`                         | ![][c20ok]   |            |\n  | `ranges::transform_view`\u003cbr/\u003e`views::transform`                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::take_view`\u003cbr/\u003e`views::take`                             | ![][c20ok]   |            |\n  | `ranges::take_while_view`\u003cbr/\u003e`views::take_while`                 | ![][c20ok]   |            |\n  | `ranges::drop_view`\u003cbr/\u003e`views::drop`                             | ![][c20ok]   | ![][c23ok] |\n  | `ranges::drop_while_view`\u003cbr/\u003e`views::drop_while`                 | ![][c20ok]   |            |\n  | `ranges::join_view`\u003cbr/\u003e`views::join`                             | ![][c20ok]   |            |\n  | `ranges::lazy_split_view`\u003cbr/\u003e`views::lazy_split`                 | ![][c20ok]   |            |\n  | `ranges::split_view`\u003cbr/\u003e`views::split`                           | ![][c20ok]   |            |\n  | `views::counted`                                                  | ![][c20ok]   |            |\n  | `ranges::common_view`\u003cbr/\u003e`views::common`                         | ![][c20ok]   |            |\n  | `ranges::reverse_view`\u003cbr/\u003e`views::reverse`                       | ![][c20ok]   |            |\n  | `ranges::as_const_view`\u003cbr/\u003e`views::as_const`                     | ![][c23ok]   |            |\n  | `ranges::as_rvalue_view`\u003cbr/\u003e`views::as_rvalue`                   | ![][c23no]   |            |\n  | `ranges::elements_view`\u003cbr/\u003e`views::elements`                     | ![][c20ok]   |            |\n  | `ranges::keys_view`\u003cbr/\u003e`views::keys`                             | ![][c20ok]   |            |\n  | `ranges::values_view`\u003cbr/\u003e`views::values`                         | ![][c20ok]   |            |\n  | `ranges::enumerate_view`\u003cbr/\u003e`views::enumerate`                   | ![][c23ok]   |            |\n  | `ranges::zip_view`\u003cbr/\u003e`views::zip`                               | ![][c23ok]   |            |\n  | `ranges::zip_transform_view`\u003cbr/\u003e`views::zip_transform`           | ![][c23ok]   |            |\n  | `ranges::adjacent_view`\u003cbr/\u003e`views::adjacent`                     | ![][c23no]   |            |\n  | `ranges::adjacent_transform_view`\u003cbr/\u003e`views::adjacent_transform` | ![][c23no]   |            |\n  | `ranges::join_with_view`\u003cbr/\u003e`views::join_with`                   | ![][c23ok]   |            |\n  | `ranges::stride_view`\u003cbr/\u003e`views::stride`                         | ![][c23no]   |            |\n  | `ranges::slide_view`\u003cbr/\u003e`views::slide`                           | ![][c23no]   |            |\n  | `ranges::chunk_view`\u003cbr/\u003e`views::chunk`                           | ![][c23no]   |            |\n  | `ranges::chunk_by_view`\u003cbr/\u003e`views::chunk_by`                     | ![][c23no]   |            |\n  | `ranges::concat_view`\u003cbr/\u003e`views::concat`                         | ![][c26ok] * |            |\n  | `ranges::begin`                                                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::end`                                                     | ![][c20ok]   | ![][c23ok] |\n  | `ranges::cbegin`                                                  | ![][c20ok]   | ![][c23ok] |\n  | `ranges::cend`                                                    | ![][c20ok]   | ![][c23ok] |\n  | `ranges::crbegin`                                                 | ![][c20ok]   | ![][c23ok] |\n  | `ranges::crend`                                                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::size`                                                    | ![][c20ok]   | ![][c23ok] |\n  | `ranges::ssize`                                                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::empty`                                                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::data`                                                    | ![][c20ok]   | ![][c23ok] |\n  | `ranges::cdata`                                                   | ![][c20ok]   | ![][c23ok] |\n  | `ranges::subrange_kind`                                           | ![][c20ok]   |            |\n  | `ranges::from_range_t`\u003cbr/\u003e`ranges::from_range`                   | ![][c23ok]   |            |\n\n  * Notes\n    * `ranges::to`\n      * CTAD for `Args...` may be incorrect before C++17\n      * Equipped with C++23 conversions(e.g., `pair-like` -\u003e `std::pair`)\n    * `ranges::concat_view`\n      * Implemented before standardization\n      * Needs update\n\n#### `\u003crcu\u003e`\n\n  |                      | Introduced | Revision |\n  |----------------------|------------|----------|\n  | `rcu_obj_base`       | ![][c26no] |          |\n  | `rcu_domain`         | ![][c26no] |          |\n  | `rcu_default_domain` | ![][c26no] |          |\n  | `rcu_synchronize`    | ![][c26no] |          |\n  | `rcu_barrier`        | ![][c26no] |          |\n  | `rcu_retire`         | ![][c26no] |          |\n\n#### `\u003csemaphore\u003e`\n\n  |                      | Introduced | Revision |\n  |----------------------|------------|----------|\n  | `counting_semaphore` | ![][c20no] |          |\n  | `binary_semaphore`   | ![][c20no] |          |\n\n#### `\u003cshared_mutex\u003e`\n\n  |                    | Introduced | Revision |\n  |--------------------|------------|----------|\n  | `shared_mutex`     | ![][c17no] |          |\n\n#### `\u003cstop_token\u003e`\n\n  |                 | Introduced | Revision |\n  |-----------------|------------|----------|\n  | `stop_token`    | ![][c20no] |          |\n  | `stop_source`   | ![][c20no] |          |\n  | `stop_callback` | ![][c20no] |          |\n  | `nostopstate_t` | ![][c20no] |          |\n  | `nostopstate`   | ![][c20no] |          |\n\n#### `\u003cstring\u003e`\n\n  |                                      | Introduced | Revision              |\n  |--------------------------------------|------------|-----------------------|\n  | `erase(std::basic_string)`           | ![][c20no] | ![][c26no]            |\n  | `erase_if(std::basic_string)`        | ![][c20no] | ![][c26no]            |\n  | `basic_string`                       |            | ![][c20no] ![][c23no] |\n\n#### `\u003cstring_view\u003e`\n\n  |                                | Introduced | Revision                           |\n  |--------------------------------|------------|------------------------------------|\n  | `basic_string_view`            | ![][c17ok] | ![][c20ok] ![][c23ok] ![][c26ok] * |\n  | `std::hash\u003cbasic_string_view\u003e` | ![][c17ok] |                                    |\n  | `operator\"\"_sv`                | ![][c17ok] |                                    |\n\n  * Notes\n    * C++26 \n      * [P2591 (R5)](https://wg21.link/P2591R5)\n      * [P2697 (R1)](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2697r1.pdf)\n        * Implemented as `preview::basic_string_view::operator bitset`\n      * [P2495 (R3)](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2495r3.pdf)\n        * Implemented as `preview::basic_string_view::operator string-streams`\n        * Memory allocation is performed (conversion to `std::basic_string`)\n\n#### `\u003csource_location\u003e`\n  N/A\n\n  |                   | Introduced | Revision |\n  |-------------------|------------|----------|\n  | `source_location` | ![][c20no] |          |\n\n#### `\u003csyncstream\u003e`\n\n  |                            | Introduced | Revision |\n  |----------------------------|------------|----------|\n  | `basic_syncbuf`            | ![][c20no] |          |\n  | `basic_osyncstream`        | ![][c20no] |          |\n  | `std::swap(basic_syncbuf)` | ![][c20no] |          |\n\n#### `\u003cspan\u003e`\n\n  |                     | Introduced | Revision              |\n  |---------------------|------------|-----------------------|\n  | `span`              | ![][c20ok] | ![][c23ok] ![][c26ok] |\n  | `dynamic_extent`    | ![][c20ok] |                       |\n  | `as_bytes`          | ![][c20ok] |                       |\n  | `as_writable_bytes` | ![][c20ok] |                       |\n\n#### `\u003cspanstream\u003e`\n\n  |                     | Introduced | Revision |\n  |---------------------|------------|----------|\n  | `basic_spanbuf`     | ![][c23no] |          |\n  | `basic_ispanstream` | ![][c23no] |          |\n  | `basic_ospanstream` | ![][c23no] |          |\n  | `basic_spanstream`  | ![][c23no] |          |\n\n#### `\u003cstacktrace\u003e`\n\n  |                           | Introduced | Revision |\n  |---------------------------|------------|----------|\n  | `stacktrace_entry`        | ![][c23no] |          |\n  | `basic_stacktrace`        | ![][c23no] |          |\n  | `hash\u003cstracktrace_entry\u003e` | ![][c23no] |          |\n  | `hash\u003cbasic_stacktrace\u003e`  | ![][c23no] |          |\n\n#### `\u003ctext_encoding\u003e`\n\n  |                 | Introduced | Revision |\n  |-----------------|------------|----------|\n  | `text_encoding` | ![][c26no] |          |\n\n#### `\u003cthread\u003e`\n\n  |           | Introduced | Revision |\n  |-----------|------------|----------|\n  | `jthread` | ![][c20no] |          |\n\n#### `\u003ctuple\u003e`\n\n  |                                      | Introduced | Revision   |\n  |--------------------------------------|------------|------------|\n  | `apply`                              | ![][c17ok] | ![][c23ok] |\n  | `make_from_tuple`                    | ![][c17ok] | ![][c23ok] |\n  | `tuple_like` `pair_like`             | ![][c23ok] |            |\n  | `basic_common_reference\u003ctuple-like\u003e` | ![][c23ok] |            |\n  | `common_type\u003ctuple-like\u003e`            | ![][c23ok] |            |\n  | `formatter\u003ctuple-like\u003e`              | ![][c23no] |            |\n\n#### `\u003ctype_traits\u003e`\n\n  |                                                 | Introduced     | Revision              |\n  |-------------------------------------------------|----------------|-----------------------|\n  | `common_type`                                   | ![][c14]       | ![][c20ok] ![][c23ok] |\n  | `bool_constant`                                 | ![][c17ok]     |                       |\n  | `has_unique_object_representations`             | ![][c17no] N/A |                       |\n  | `is_aggregate`                                  | ![][c17no] N/A |                       |\n  | `is_swappable_with`\u003cbr/\u003e`is_swappable`...       | ![][c17ok]     |                       |\n  | `is_invocable`                                  | ![][c17ok]     |                       |\n  | `invoke_result`                                 | ![][c17ok]     |                       |\n  | `void_t`                                        | ![][c17ok]     |                       |\n  | `conjunction`                                   | ![][c17ok]     |                       |\n  | `disjunction`                                   | ![][c17ok]     |                       |\n  | `negation`                                      | ![][c17ok]     |                       |\n  | `common_reference`\u003cbr/\u003e`basic_common_reference` | ![][c20ok]     | ![][c23ok]            |\n  | `is_bounded_array`                              | ![][c20ok]     |                       |\n  | `is_unbounded_array`                            | ![][c20ok]     |                       |\n  | `is_scoped_enum`                                | ![][c20no] N/A |                       |\n  | `is_constant_evaluated`                         | ![][c20no] N/A |                       |\n  | `is_corresponding_member`                       | ![][c20no] N/A |                       |\n  | `is_layout_compatible`                          | ![][c20no] N/A |                       |\n  | `is_nothrow_convertible`                        | ![][c20ok]     |                       |\n  | `is_pointer_interconvertible_base_of`           | ![][c20no] N/A |                       |\n  | `is_pointer_interconvertible_with_class`        | ![][c20no] N/A |                       |\n  | `remove_cvref`                                  | ![][c20ok]     |                       |\n  | `type_identity`                                 | ![][c20ok]     |                       |\n  | `is_implicit_lifetime`                          | ![][c23no] N/A |                       |\n  | `is_scoped_enum`                                | ![][c23no] N/A |                       |\n  | `reference_converts_from_temporary`             | ![][c23no] N/A |                       |\n  | `reference_constructs_from_temporary`           | ![][c23no] N/A |                       |\n  | `is_within_lifetime`                            | ![][c26no] N/A |                       |\n  | `is_virtual_base_of`                            | ![][c26no]     |                       |\n\n* Notes\n  * `common_type`\n    * If `common_type` fails to define member typedef `type`, it falls back to `std::common_type`\n    ```c++\n    struct common_a {};\n    struct common_b {};\n    struct common_c {};\n    \n    template\u003c\u003e\n    struct std::common_type\u003ccommon_a, common_b\u003e {\n      using type = common_c;\n    };\n    \n    // fallback to std::common_type for user specialization types\n    static_assert(std::is_same_v\u003cpreview::common_type_t\u003ccommon_a, common_b\u003e, common_c\u003e);\n    \n    // MSVC and GCC (before C++23) does not satisfy C++23 standard for std::common_type\u003ctuple-like\u003e  \n    static_assert(std::is_same_v\u003c\n        std::common_type_t\u003cstd::tuple\u003cint, int\u003e, std::pair\u003cint, double\u003e\u003e, \n        std::pair\u003cint, int\u003e\u003e);\n    \n    // Since std::common_type does not satisfy C++23, preview::common_type does not fallback to std::common_type\n    static_assert(std::is_same_v\u003c\n        preview::common_type_t\u003c std::tuple\u003cint, int\u003e, std::pair\u003cint, double\u003e\u003e, \n        std::pair\u003cint, double\u003e\u003e);\n    ```\n\n#### `\u003cutility\u003e`\n\n  |                             | Introduced | Revision |\n  |-----------------------------|------------|----------|\n  | `as_const`                  | ![][c17ok] |          |\n  | `in_place`\u003cbr/\u003e`in_place_t` | ![][c17ok] |          |\n  | `cmp_equal`...              | ![][c20ok] |          |\n  | `in_range`                  | ![][c20ok] |          |\n  | `forward_like`              | ![][c23ok] |          |\n  | `to_underlying`             | ![][c23ok] |          |\n  | `unreachable`               | ![][c23ok] |          |\n  | `nontype`\u003cbr/\u003e`nontype_t`   | ![][c26ok] |          |\n\n#### `\u003cvariant\u003e`\n\n  |                       | Introduced | Revision   |\n  |-----------------------|------------|------------|\n  | `variant`             | ![][c17ok] | ![][c26ok] |\n  | `monostate`           | ![][c17ok] |            |\n  | `bad_variant_access`  | ![][c17ok] |            |\n  | `variant_size`        | ![][c17ok] |            |\n  | `variant_alternative` | ![][c17ok] |            |\n  | `std::hash\u003cvariant\u003e`  | ![][c17ok] |            |\n  | `variant_npos`        | ![][c17ok] |            |\n  | `visit`               | ![][c17ok] |            |\n  | `get_if`              | ![][c17ok] |            |\n\n#### `\u003cversion\u003e`\n\n  |                      | Introduced | Revision |\n  |----------------------|------------|----------|\n  |                      |            |          |\n\n\n[c98]: https://img.shields.io/badge/C++98-grey\n[c11]: https://img.shields.io/badge/C++11-grey\n[c14]: https://img.shields.io/badge/C++14-grey\n[c17]: https://img.shields.io/badge/C++17-0055AA\n[c20]: https://img.shields.io/badge/C++20-4477BB\n[c23]: https://img.shields.io/badge/C++23-skyblue\n[c26]: https://img.shields.io/badge/C++26-99EEFF\n\n[c17no]: https://img.shields.io/badge/C++17-red\n[c17ok]: https://img.shields.io/badge/C++14-C++17-0055AA\n\n[c20no]: https://img.shields.io/badge/C++20-red\n[c20ok]: https://img.shields.io/badge/C++14-C++20-4477BB\n[c20ok17]: https://img.shields.io/badge/C++17-C++20-4477BB\n\n[c23no]: https://img.shields.io/badge/C++23-red\n[c23ok]: https://img.shields.io/badge/C++14-C++23-skyblue\n[c23ok17]: https://img.shields.io/badge/C++17-C++23-skyblue\n[c23ok20]: https://img.shields.io/badge/C++20-C++23-skyblue\n\n[c26no]: https://img.shields.io/badge/C++26-red\n[c26ok]: https://img.shields.io/badge/C++14-C++26-CCEEFF\n[c26ok17]: https://img.shields.io/badge/C++17-C++26-77EEFF\n[c26ok20]: https://img.shields.io/badge/C++20-C++26-77EEFF\n[c26ok23]: https://img.shields.io/badge/C++23-C++26-77EEFF\n\n\n[p000]: https://img.shields.io/badge/0%25-red\n[p001]: https://img.shields.io/badge/1%25-orange\n[p002]: https://img.shields.io/badge/2%25-orange\n[p003]: https://img.shields.io/badge/3%25-orange\n[p004]: https://img.shields.io/badge/4%25-orange\n[p005]: https://img.shields.io/badge/5%25-orange\n[p006]: https://img.shields.io/badge/6%25-orange\n[p007]: https://img.shields.io/badge/7%25-orange\n[p008]: https://img.shields.io/badge/8%25-orange\n[p009]: https://img.shields.io/badge/9%25-orange\n[p010]: https://img.shields.io/badge/10%25-orange\n[p011]: https://img.shields.io/badge/11%25-orange\n[p012]: https://img.shields.io/badge/12%25-orange\n[p013]: https://img.shields.io/badge/13%25-orange\n[p014]: https://img.shields.io/badge/14%25-orange\n[p015]: https://img.shields.io/badge/15%25-orange\n[p016]: https://img.shields.io/badge/16%25-orange\n[p017]: https://img.shields.io/badge/17%25-orange\n[p018]: https://img.shields.io/badge/18%25-orange\n[p019]: https://img.shields.io/badge/19%25-orange\n[p020]: https://img.shields.io/badge/20%25-orange\n[p021]: https://img.shields.io/badge/21%25-orange\n[p022]: https://img.shields.io/badge/22%25-orange\n[p023]: https://img.shields.io/badge/23%25-orange\n[p024]: https://img.shields.io/badge/24%25-orange\n[p025]: https://img.shields.io/badge/25%25-yellow\n[p026]: https://img.shields.io/badge/26%25-yellow\n[p027]: https://img.shields.io/badge/27%25-yellow\n[p028]: https://img.shields.io/badge/28%25-yellow\n[p029]: https://img.shields.io/badge/29%25-yellow\n[p030]: https://img.shields.io/badge/30%25-yellow\n[p031]: https://img.shields.io/badge/31%25-yellow\n[p032]: https://img.shields.io/badge/32%25-yellow\n[p033]: https://img.shields.io/badge/33%25-yellow\n[p034]: https://img.shields.io/badge/34%25-yellow\n[p035]: https://img.shields.io/badge/35%25-yellow\n[p036]: https://img.shields.io/badge/36%25-yellow\n[p037]: https://img.shields.io/badge/37%25-yellow\n[p038]: https://img.shields.io/badge/38%25-yellow\n[p039]: https://img.shields.io/badge/39%25-yellow\n[p040]: https://img.shields.io/badge/40%25-yellow\n[p041]: https://img.shields.io/badge/41%25-yellow\n[p042]: https://img.shields.io/badge/42%25-yellow\n[p043]: https://img.shields.io/badge/43%25-yellow\n[p044]: https://img.shields.io/badge/44%25-yellow\n[p045]: https://img.shields.io/badge/45%25-yellow\n[p046]: https://img.shields.io/badge/46%25-yellow\n[p047]: https://img.shields.io/badge/47%25-yellow\n[p048]: https://img.shields.io/badge/48%25-yellow\n[p049]: https://img.shields.io/badge/49%25-yellow\n[p050]: https://img.shields.io/badge/50%25-yellowgreen\n[p051]: https://img.shields.io/badge/51%25-yellowgreen\n[p052]: https://img.shields.io/badge/52%25-yellowgreen\n[p053]: https://img.shields.io/badge/53%25-yellowgreen\n[p054]: https://img.shields.io/badge/54%25-yellowgreen\n[p055]: https://img.shields.io/badge/55%25-yellowgreen\n[p056]: https://img.shields.io/badge/56%25-yellowgreen\n[p057]: https://img.shields.io/badge/57%25-yellowgreen\n[p058]: https://img.shields.io/badge/58%25-yellowgreen\n[p059]: https://img.shields.io/badge/59%25-yellowgreen\n[p060]: https://img.shields.io/badge/60%25-yellowgreen\n[p061]: https://img.shields.io/badge/61%25-yellowgreen\n[p062]: https://img.shields.io/badge/62%25-yellowgreen\n[p063]: https://img.shields.io/badge/63%25-yellowgreen\n[p064]: https://img.shields.io/badge/64%25-yellowgreen\n[p065]: https://img.shields.io/badge/65%25-yellowgreen\n[p066]: https://img.shields.io/badge/66%25-yellowgreen\n[p067]: https://img.shields.io/badge/67%25-yellowgreen\n[p068]: https://img.shields.io/badge/68%25-yellowgreen\n[p069]: https://img.shields.io/badge/69%25-yellowgreen\n[p070]: https://img.shields.io/badge/70%25-yellowgreen\n[p071]: https://img.shields.io/badge/71%25-yellowgreen\n[p072]: https://img.shields.io/badge/72%25-yellowgreen\n[p073]: https://img.shields.io/badge/73%25-yellowgreen\n[p074]: https://img.shields.io/badge/74%25-yellowgreen\n[p075]: https://img.shields.io/badge/75%25-green\n[p076]: https://img.shields.io/badge/76%25-green\n[p077]: https://img.shields.io/badge/77%25-green\n[p078]: https://img.shields.io/badge/78%25-green\n[p079]: https://img.shields.io/badge/79%25-green\n[p080]: https://img.shields.io/badge/80%25-green\n[p081]: https://img.shields.io/badge/81%25-green\n[p082]: https://img.shields.io/badge/82%25-green\n[p083]: https://img.shields.io/badge/83%25-green\n[p084]: https://img.shields.io/badge/84%25-green\n[p085]: https://img.shields.io/badge/85%25-green\n[p086]: https://img.shields.io/badge/86%25-green\n[p087]: https://img.shields.io/badge/87%25-green\n[p088]: https://img.shields.io/badge/88%25-green\n[p089]: https://img.shields.io/badge/89%25-green\n[p090]: https://img.shields.io/badge/90%25-green\n[p091]: https://img.shields.io/badge/91%25-green\n[p092]: https://img.shields.io/badge/92%25-green\n[p093]: https://img.shields.io/badge/93%25-green\n[p094]: https://img.shields.io/badge/94%25-green\n[p095]: https://img.shields.io/badge/95%25-green\n[p096]: https://img.shields.io/badge/96%25-green\n[p097]: https://img.shields.io/badge/97%25-green\n[p098]: https://img.shields.io/badge/98%25-green\n[p099]: https://img.shields.io/badge/99%25-green\n[p100]: https://img.shields.io/badge/100%25-brightgreen\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flackhole%2Fstl-preview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flackhole%2Fstl-preview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flackhole%2Fstl-preview/lists"}