C++26 編譯器支援
來自 cppreference.com
* - 將滑鼠懸停在標有星號 * 的單元格上可檢視額外的彈出式註釋。
DRnn - “DR”後的數字 nn 表示該缺陷報告(Defect Report)所適用的 C++ 修訂版本,例如 DR20 → C++20。
[編輯] C++26 核心語言特性
C++26 特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (前 PGI)* |
Nvidia nvcc |
Cray |
|
---|---|---|---|---|---|---|---|---|---|---|---|
DR98: 移除詞法分析中的未定義行為 | P2621R3 | 是 | 3.3 | 16.0.0* | |||||||
DR98: 使不可編碼字串字面量格式錯誤 | P1854R4 | 14 | 14 | 16.0.0* | |||||||
未求值字串 | P2361R6 | 14 | 17 (部分)* 18 |
16.0.0* | |||||||
將 @ 、$ 和 ` 新增到基本字元集 |
P2558R2 | 15 | 是 | 16.0.0* | |||||||
從 void* 到 constexpr 的轉換 (FTM)* | P2738R1 | 14 | 17 | ||||||||
DR20: 關於標準屬性的可忽略性 | P2552R3 | 15 | 是 | ||||||||
DR11: 大括號初始化器的靜態儲存 | P2752R3 | 14 | |||||||||
使用者生成的 static_assert 訊息 (FTM)* | P2741R3 | 14 | 17 | ||||||||
沒有名稱的佔位符變數 (FTM)* | P2169R4 | 14 | 18 | ||||||||
包索引 (FTM)* | P2662R3 | 15 | 19 | ||||||||
移除列舉上的已廢棄算術轉換 | P2864R2 | 14 | 18 | ||||||||
DR11/20: 模板引數初始化 | P2308R1 | 9 | 18 | ||||||||
禁止將返回的引用繫結到臨時物件 | P2748R5 | 14 | 19 | ||||||||
結構化繫結的屬性 (FTM)* | P0609R3 | 15 | 19 | ||||||||
未初始化讀取的錯誤行為,[[indeterminate]] 屬性 |
P2795R5 | ||||||||||
= delete("reason"); (FTM)* | P2573R2 | 15 | 19 | ||||||||
可變引數友元 (FTM)* | P2893R3 | 15 | 20 | ||||||||
DR98: 澄清聚合初始化中大括號省略的規則 | P3106R1 | 是 | 17 | ||||||||
DR20: 禁止模組宣告為宏 | P3034R1 | 15 | |||||||||
DR11: 平凡無限迴圈不是未定義行為 | P2809R3 | 14 | 19 | ||||||||
constexpr placement new (FTM)* (FTM)* | P2747R2 | 15 | 20 | ||||||||
作為條件的結構化繫結宣告 (FTM)* | P0963R3 | 15 | 6 (部分)* 21 |
||||||||
涉及摺疊表示式的約束的排序 (FTM)* | P2963R3 | 19 | |||||||||
刪除不完整型別的指標應格式錯誤 | P3144R2 | 15 | 19 | 6.7 | |||||||
結構化繫結可以引入包 (FTM)* | P1061R10 | 21 | |||||||||
constexpr 結構化繫結和對 constexpr 變數的引用 | P2686R5 | 6.7 | |||||||||
constexpr 異常 (FTM)* | P3068R6 | ||||||||||
牛津可變引數逗號 | P3176R1 | 15 | 20 | ||||||||
移除已廢棄的陣列比較 | P2865R6 | 15 | |||||||||
#embed (FTM)* |
P1967R14 | 15 | 19* | ||||||||
概念和變數模板的模板引數 (FTM)* | P2841R7 | ||||||||||
平凡可重定位性 (FTM)* | P2786R13 | ||||||||||
平凡聯合 (FTM)* | P3074R7 | ||||||||||
可觀察檢查點 | P1494R5 | ||||||||||
契約 (FTM)* | P2900R14 | ||||||||||
C++26 特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (前 PGI)* |
Nvidia nvcc |
Cray |
[編輯] C++26 庫特性
C++26 特性 |
提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
|
---|---|---|---|---|---|---|
測試 <charconv> 函式的成功或失敗 (FTM)* | P2497R0 | 14 | 18 | 16.0.0* | ||
std::text_encoding: 文字編碼識別 (FTM)* | P1885R12 P2862R1 |
14 | ||||
std::to_string 和 std::to_wstring 的算術過載使用 std::format (FTM)* | P2587R3 | 14 | ||||
型別檢查格式引數 (FTM)* | P2757R3 | 15 | ||||
格式化指標 (FTM)* | P2510R3 | 14* | 17* | 19.40** | ||
雜湊支援 std::chrono 值類 (FTM)* | P2592R3 | |||||
<rcu>: 讀複製更新 (FTM)* | P2545R4 | |||||
<hazard_pointer>: 危害指標 (FTM)* | P2530R3 | |||||
ADL-proof std::projected | P2538R1 | 14* | 18* | 19.38** | 16.0.0* | |
constexpr 穩定排序 (FTM)* | P2562R1 | 21* | ||||
成員 std::basic_format_arg::visit() (FTM)* | P2637R3 | 15 | 19 | |||
成員 std::variant::visit() (FTM)* | P2637R3 | 15 | 18 | |||
std::is_within_lifetime (FTM)* | P2641R4 | |||||
用剩餘的異構過載擴充套件關聯容器 (FTM)* | P2363R5 | |||||
允許在無序關聯容器中使用 std::weak_ptr 作為鍵 (FTM)* | P1901R2 | |||||
檔案流中的原生控制代碼 (FTM)* | P1759R6 | 14 | 18 | 16.0.0* | ||
將字串流與 std::string_view 介面化 (FTM)* | P2495R3 | 19 | ||||
將 std::bitset 與 std::string_view 介面化 (FTM)* | P2697R1 | 18 | 16.0.0* | |||
<cmath> 和 <complex> 的更多 constexpr (FTM)* (FTM)* | P1383R2 | 4.6 (部分)* | ||||
為比例新增新的 2022 SI 字首:std::quecto, std::ronto, std::ronna, 和 std::quetta (FTM)* | P2734R0 | 14 | 17 | |||
std::function_ref: 型別擦除的可呼叫引用 (FTM)* | P0792R14 | |||||
std::copyable_function (FTM)* | P2548R6 | |||||
std::bind_front、std::bind_back 和 std::not_fn 到 NTTP 可呼叫物件 (FTM)* (FTM)* (FTM)* | P2714R1 | |||||
std::submdspan() (FTM)* | P2630R4 P3355R1 |
|||||
獨立語言:可選 ::operator new | P2013R5 | 不適用 | ||||
獨立 std::char_traits、std::errc 以及 <charconv>、<cstdlib>、<cstring>、<cwchar> 中的設施 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2338R4 | 不適用 | ||||
更多獨立設施 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2198R7 | 不適用 | ||||
飽和算術 (FTM)* | P0543R3 | 14 | 18 | 16.0.0* | ||
<debugging>: 除錯支援 (FTM)* | P2546R5 P2810R4 |
|||||
<linalg>: 基於 BLAS 的自由函式線性代數介面 (FTM)* | P1673R13 P3050R2 P3222R0 |
|||||
使 assert() 宏使用者友好 | P2264R7 | |||||
執行時格式字串 (FTM)* | P2918R2 | 14 | 18 | 16.0.0* | ||
初始化列表上的 std::span (FTM)* | P2447R6 | 18 | 16.0.0* | |||
std::span::at() (FTM)* | P2821R5 | 14 | 18 | 16.0.0* | ||
為 std::complex 新增元組協議 (FTM)* | P2819R2 | 19 | ||||
std::generate_canonical 的新規範 | P0952R2 | 19.42* | ||||
移除已廢棄的 typedef std::allocator::is_always_equal | P2868R3 | 15 | 18 | 16.0.0* | ||
移除不帶引數的 std::basic_string::reserve() 函式過載 | P2870R3 | 18 | 16.0.0* | |||
移除已廢棄的 Unicode 轉換分面 (<codecvt>) | P2871R3 | 18 | 16.0.0* | |||
獨立:移除 std::strtok (FTM)* | P2937R0 | 14 | 19.40* | |||
獨立庫:部分類 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2407R5 | 14 | 19.42* | |||
獨立庫:std::inout、std::expected、std::span (FTM)* (FTM)* (FTM)* (FTM)* | P2833R2 | 14 | 19.42* | |||
DR23: std::basic_const_iterator 應遵循其底層型別的可轉換性 (FTM)* | P2836R1 P2950R0 |
14 | 19.40* | |||
DR20: std::make_format_args 現在只接受左值引用,而不是轉發引用 | P2905R2 | 14 | 18 | 19.40* | 16.0.0* | |
DR20: 修復程式碼單元作為整數的格式化 (FTM)* | P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | |
views::concat (FTM)* | P2542R8 | 15 | ||||
字串和字串檢視的連線 (FTM)* | P2591R5 | 15 | 19 | |||
為演算法啟用列表初始化 (FTM)* | P2248R8 P3217R0 |
15 | ||||
std::ranges::generate_random (FTM)* | P1068R11 | |||||
std::reference_wrapper 的比較,以及 std::pair、std::tuple、std::optional 和 std::variant 的比較的約束 (FTM)* (FTM)* | P2944R3 | 14 | 19 (部分)* | |||
填充的 mdspan 佈局 (FTM)* | P2642R6 | |||||
使用整數常量的 std::span 和 std::mdspan 的新 CTAD | P3029R1 | 19 | ||||
原子最大值和最小值 (FTM)* | P0493R5 | |||||
std::formatter<std::filesystem::path> (FTM)* | P2845R8 | |||||
用 std::println() 列印空行 (FTM)* | P3142R0 | 14* | 19* | 19.41** | ||
解除對 std::polymorphic_allocator::destroy 的廢棄 | P2875R4 | 15 | 19.41* | |||
移除已廢棄的 strstreams | P2867R2 | 19 | ||||
移除已廢棄的 std::shared_ptr 原子訪問 API | P2869R4 | |||||
移除 std::wstring_convert | P2872R3 | 19 | ||||
DR23: 允許 std::print 的高效實現 (FTM)* | P3107R5 P3235R3 |
19.43* | ||||
執行控制庫 (FTM)* | P2300R10 P3396R0 |
|||||
std::inplace_vector: 具有固定容量的動態可調整大小向量 (FTM)* | P0843R14 | |||||
std::philox_engine: 基於計數器的隨機數引擎 (FTM)* | P2075R6 | |||||
std::optional 範圍支援 (FTM)* | P3168R2 | |||||
std::is_virtual_base_of: 用於檢測虛基類的型別特性 (FTM)* | P2985R0 | 15 | 20 | |||
std::mdspan 的 std::dims (FTM)* | P2389R2 | 19 | ||||
DR11: std::ignore 型別的形式規範 | P2968R2 | 15 | 19 | 19.42* | ||
DR20: 移除間接可呼叫概念中的公共引用要求 (FTM)* | P2997R1 | 15 | 19 | 19.42* | ||
廢棄 std::is_trivial 和 std::is_trivial_v | P3247R2 | 15 | ||||
DR20: 演算法函式物件 | P3136R1 | 是 | 是 | 19.39* | 是 | |
std::ranges::cache_latest_view (FTM)* | P3138R5 | 15 | ||||
約束 std::expected 等式運算子 (FTM)* | P3379R0 | 15 | ||||
std::aligned_accessor: 一個表示指標過度對齊的 std::mdspan 訪問器 (FTM)* | P2897R7 | |||||
std::is_sufficiently_aligned: 檢查指標的對齊前提條件 (FTM)* | P2897R7 | |||||
std::atomic_ref::address() (FTM)* | P2835R7 | |||||
DR11/20: std::atomic 和 std::atomic_ref 中的 cv 限定型別 | P3323R1 | 19.44* | ||||
constexpr std::atomic 和 std::atomic_ref (FTM)* | P3309R3 | |||||
專用記憶體演算法的 constexpr (FTM)* | P3508R0 P3369R0 |
|||||
<stdbit.h> 和 <stdckdint.h> | P3370R1 | |||||
<simd>: 資料並行型別 (FTM)* | P1928R15 P3430R3 P3441R2 P3287R3 P2663R7 P2933R4 |
|||||
一個用於建立執行環境的實用程式 | P3325R5 | |||||
異常型別的 constexpr,例如 std::bad_alloc, std::bad_cast 等 (FTM)* | P3068R6 P3378R2 |
|||||
平凡可重定位特性和操作 (FTM)* | P2786R13 | |||||
去功能化並廢棄 std::memory_order::consume |
P3475R1 | |||||
將 std::monostate 放入 <utility> | P0472R3 | 15 | ||||
std::indirect (FTM)* | P3019R14 | |||||
std::polymorphic (FTM)* | P3019R14 | |||||
更多 constexpr 容器和介面卡 (FTM)* | P3372R2 | |||||
非平凡型別的 constexpr std::inplace_vector (FTM)* | P3074R7 | |||||
std::ranges::to_input_view (FTM)* | P3137R3 | |||||
std::ranges::approximately_sized_range 和 std::ranges::reserve_hint (FTM)* | P2846R6 | |||||
<hive>: 一個基於桶的容器,可重用已擦除元素的記憶體位置 (FTM)* | P0447R28 | |||||
<contracts>: 契約違規處理支援 (FTM)* | P2900R14 | |||||
標準庫強化 | P3471R4 | 19.44* (部分)* | ||||
獨立庫:演算法、數值和隨機 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2976R1 | |||||
DR20: 將連續迭代器轉換為指標 | P3349R0 | |||||
C++26 特性 |
提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |