Modern C++ 言語機能の準拠状況
Modern C++ への移動
以下は、RAD Studio C++ コンパイラでサポートされる Modern C++ 機能の一覧です。
C++2c の機能
メモ:
C++2c
は、C++26 になることを想定されています。メモ: BCC64X は現在プレビュー版です。以下のステータスは目標であり、テストされておらず、最終的なサポートを保証するものではありません。BCC64X はデフォルトの言語レベルとして C++17 を使用しますが、最初のリリースではこれより高い言語レベルをサポートする予定はありません。C++2c をコンパイルするには、
-std=c++2c
で bcc64x を実行します。機能 | C++2c 提案文書 | BCC32C/X | BCC64 | BCC64X |
---|---|---|---|---|
字句解析から未定義の動作を削除 | P2621R2 | ![]() |
![]() |
![]() |
エンコードできない文字列リテラルを不正な形式とする | P1854R4 | ![]() | ||
未評価文字列 | P2361R6 | |||
@、$、` を基本文字セットに追加 | P2558R2 | ![]() |
![]() |
![]() |
void* からの constexpr キャスト | P2738R1 | ![]() | ||
標準属性の無視の可否について | P2552R3 | |||
括弧付き初期化子の静的ストレージ | P2752R3 | |||
ユーザー生成の static_assert メッセージ | P2741R3 | ![]() | ||
名前なしプレースホルダ変数 | P2169R4 |
C++23 機能
メモ: C++23 は、BCC64X がベースとする Clang バージョンと、使用する C++ RTL および STL(libc+)でサポートされています。バージョン 15 以前の Clang と libc++ の両方でサポートされている言語機能は、すべて正常に動作すると思われます。しかし、それはサポートされているわけではありません。プレビューが暗に示す非サポートレベルでもです。ただし、BCC64X コンパイラのプレビュー版では、現在、言語標準として C++17 を目指しています。ユーザーは、
-std=c++23
を使用して、ターゲット言語の互換性を変更することができます。C++20 の機能
メモ: C++20 は、BCC64X がベースとする Clang バージョンと、使用する C++ RTL および STL(libc+)でサポートされています。 バージョン 15 以前の Clang と libc++ の両方でサポートされている言語機能は、すべて正常に動作すると思われます。 しかし、それはサポートされているわけではありません。プレビューが暗に示す非サポートレベルでもです。 ただし、BCC64X コンパイラのプレビュー版では、現在、言語標準として C++17 を目指しています。 ユーザーは、
-std=c++20
を使用して、ターゲット言語の互換性を変更することができます。 C++17 の機能
メモ: BCC64X は現在プレビュー版です。 以下のステータスは目標であり、最終的なリリースを保証するものではありません。
機能 | C++17 提案書 | BCC32C/X | BCC64 | BCC64X |
---|---|---|---|---|
ダイレクト リスト初期化のための新しい自動ルール | N3922 | ![]() |
![]() |
![]() |
メッセージなしの static_assert | N3928 | ![]() |
![]() |
![]() |
テンプレート テンプレート パラメータでの typename | N4051 | ![]() |
![]() |
![]() |
トライグラフの削除 | N4086 | ![]() |
![]() |
![]() |
入れ子ネームスペース定義 | N4230 | ![]() |
![]() |
![]() |
ネームスペースと列挙型のための属性 | N4266 | ![]() |
![]() |
![]() |
u8 文字リテラル | N4267 | ![]() |
![]() |
![]() |
すべての非型テンプレート引数に対して定数評価を可能にする | N4268 | ![]() |
![]() |
![]() |
折り畳み式 | N4295 | ![]() |
![]() |
![]() |
登録キーワードの非推奨使用の削除 | P0001R1 | ![]() |
![]() |
![]() |
非推奨演算子 ++(bool) | P0002R1 | ![]() |
![]() |
![]() |
C++17 からの非推奨例外仕様 | P0003R5 | ![]() |
![]() |
![]() |
例外仕様を型システムの一部にする | P0012R1 | ![]() |
![]() |
![]() |
基本クラスを持つクラスの集約初期化 | P0017R1 | ![]() |
![]() |
![]() |
*this のラムダ キャプチャ | P0018R3 | ![]() |
![]() |
![]() |
繰り返しなしの属性ネームスペースの使用 | P0028R4 | ![]() |
![]() |
![]() |
オーバー アラインされたデータの動的メモリ割り当て | P0035R4 | ![]() |
![]() |
![]() |
単項 fold 式と空のパラメータ パック | P0036R0 | ![]() |
![]() |
![]() |
プリプロセッサ条件での __has_include | P0061R1 | ![]() |
![]() |
![]() |
クラス テンプレートのテンプレート引数の軽減 | P0091R3 | ![]() |
![]() |
![]() |
auto 型での非型テンプレート パラメータ | P0127R2 | ![]() |
![]() |
![]() |
コピー省略の保証 | P0135R1 | ![]() |
![]() |
![]() |
コンストラクタ継承の新しい仕様(DR1941 など) | P0136R1 | ![]() |
![]() |
![]() |
参照メンバーを持つクラス オブジェクトの置換 | P0137R1 | ![]() | ||
列挙型の直接リスト初期化 | P0138R2 | ![]() |
![]() |
![]() |
より厳しい式の評価順序 | P0145R3 | ![]() |
![]() |
![]() |
constexpr ラムダ式 | P0170R1 | ![]() |
![]() |
![]() |
範囲ベース付きの for での begin および end の型の違い | P0184R0 | ![]() |
![]() |
![]() |
[[fallthrough]] 属性 | P0188R1 | ![]() |
![]() |
![]() |
[[nodiscard]] 属性 | P0189R1 | ![]() |
![]() |
![]() |
using-declarations のパック拡張 | P0195R2 | ![]() |
![]() |
![]() |
[[maybe_unused]] 属性 | P0212R1 | ![]() |
![]() |
![]() |
構造型バインディング | P0217R3 | ![]() |
![]() |
![]() |
16 進数の浮動小数点リテラル | P0245R1 | ![]() |
![]() |
![]() |
不明な属性の無視 | P0283R2 | ![]() |
![]() |
![]() |
constexpr if 文 | P0292R2 | ![]() |
![]() |
![]() |
if および switch のための初期化文 | P0305R1 | ![]() |
![]() |
![]() |
インライン変数 | P0386R2 | ![]() |
![]() |
![]() |
DR: DR: テンプレート テンプレート引数のマッチングが互換性のあるテンプレートを除外する | P0522R0 | ![]() |
![]() |
![]() |
std::uncaught_exceptions() | N4259 | ![]() |
![]() |
![]() |
std::pair と std::tuple の向上 | N4387 | ![]() |
![]() |
![]() |
std::any | P0220R1 | ![]() |
![]() |
|
std::variant | P0088R3 | ![]() |
![]() |
![]() |
std::optional | P0220R1 | ![]() |
![]() |
|
std::shared_mutex (タイムアウトなし) | N4508 | ![]() |
![]() |
![]() |
std::string_view | N3921 | ![]() |
![]() |
|
Parallelism TS の標準化 | P0024R2 | |||
基本的な文字列変換 | P0067R5 | |||
数学の特殊関数 | P0226R1 | ![]() |
![]() |
|
map と set のスプライシング | P0083R3 | |||
ハードウェア干渉サイズ | P0154R1 | |||
std::filesystem | P0218R1 | ![]() |
![]() |
![]() |
std::byte | P0298R3 | ![]() |
![]() |
![]() |
C++14 の機能
機能 | C++14 提案書 | BCC32C/X | BCC64 |
---|---|---|---|
文脈変換の微妙な表現 | N3323 | ![]() |
![]() |
バイナリ リテラル | N3472 | ![]() |
![]() |
decltype(auto)、通常関数に対する戻り値型の軽減 | N3638 | ![]() |
![]() |
初期化/汎用化ラムダ キャプチャ(初期化キャプチャ) | N3648 | ![]() |
![]() |
汎用(多態)ラムダ式 | N3649 | ![]() |
![]() |
変数テンプレート | N3651 | ![]() |
![]() |
拡張 constexpr | N3652 | ![]() |
![]() |
メンバー初期化子と集約 (NSDMI) | N3653 | ![]() |
![]() |
メモリ割り当ての明確化(割り当ての回避/融合) | N3664 | ![]() |
![]() |
[[deprecated]] 属性 | N3760 | ![]() |
![]() |
サイズ付き割り当て解放 | N3768 | ![]() |
![]() |
数値区切りとしての単一引用符 | N3781 | ![]() |
![]() |
std::result_of と SFINAE | N3462 | ![]() |
![]() |
<complex> の constexpr | N3302 | ![]() |
![]() |
<chrono> の constexpr | N3469 | ![]() |
![]() |
<array> の constexpr | N3470 | ![]() |
![]() |
<initializer_list>、<utility>、<tuple> の constexpr | N3471 | ![]() |
![]() |
改善された std::integral_constant | N3545 | ![]() |
![]() |
<chrono> と <string> のユーザー定義リテラル | N3642 | ![]() |
![]() |
Null の前方イテレータ | N3644 | ![]() |
![]() |
std::quoted | N3654 | ![]() |
![]() |
異種混合ルックアップ | N3657 | ![]() |
![]() |
std::integer_sequence | N3658 | ![]() |
![]() |
std::shared_timed_mutex | N3659 | ![]() |
![]() |
std::exchange | N3668 | ![]() |
![]() |
const なしでの constexpr メンバー関数の固定 | N3669 | ![]() |
![]() |
std::get<T>() | N3670 | ![]() |
![]() |
2重範囲の std::equal、std::is_permutation、std::mismatch | N3671 | ![]() |
![]() |
C++11 機能
機能 | C++11 提案書 |
BCC32C/X | BCC32 | BCC64 | ||
---|---|---|---|---|---|---|
右辺値参照 | N2118 | ![]() |
![]() |
![]() | ||
*this の右辺値参照
|
N2439 | ![]() |
![]() | |||
右辺値によるクラス オブジェクトの初期化 | N1610 | ![]() |
![]() | |||
非静的データ メンバ初期化子 | N2756 | ![]() |
![]() | |||
可変個引数テンプレート | N2242 | ![]() |
![]() | |||
可変個引数テンプレートのテンプレート パラメータの拡張 | N2555 | ![]() |
![]() | |||
初期化リスト | N2672 | ![]() |
![]() | |||
静的アサーション | N1720 | ![]() |
![]() |
![]() | ||
auto 型変数
|
N1984 | ![]() |
![]() | |||
多重宣言子 auto
|
N1737 | ![]() |
![]() |
![]() | ||
記憶クラス指定子としての auto の削除 | N2546 | ![]() |
![]() | |||
関数宣言子の新しい構文 | N2541 | ![]() |
![]() | |||
ラムダ式 | N2927 | ![]() |
![]() | |||
式の宣言された型 | N2343 | ![]() |
![]() |
![]() | ||
不完全な戻り値型 | N3276 | ![]() |
![]() | |||
右山かっこ | N1757 | ![]() |
![]() | |||
関数テンプレートのデフォルト テンプレート引数 | DR226 | ![]() |
![]() | |||
式の SFINAE 問題の解決 | DR339 | ![]() |
![]() | |||
エイリアス テンプレート | N2258 | ![]() |
![]() | |||
extern テンプレート | N1987 | ![]() |
![]() |
![]() | ||
null ポインタ定数 | N2431 | ![]() |
![]() | |||
厳密に型指定された列挙型 | N2347 | ![]() |
![]() |
![]() | ||
列挙型の前方宣言 | N2764 DR1206 |
![]() |
![]() |
![]() | ||
標準属性の構文 | N2761 | |||||
一般化された定数式 | N2235 | ![]() |
![]() | |||
アラインメント サポート | N2341 | |||||
条件付きサポート動作 | N1627 | ![]() |
![]() | |||
未定義の動作を診断可能なエラーに変換 | N1727 | ![]() |
![]() | |||
委譲コンストラクタ | N1986 | ![]() |
![]() | |||
コンストラクタの継承 | N2540 | |||||
明示的な変換演算子 | N2437 | ![]() |
![]() |
![]() | ||
新しい文字型 | N2249 | ![]() |
![]() |
![]() | ||
Unicode 文字列リテラル | N2442 | ![]() |
![]() | |||
生の文字列リテラル | N2442 | ![]() |
![]() | |||
リテラル内の汎用文字名 | N2170 | ![]() |
![]() | |||
ユーザー定義リテラル | N2765 | ![]() |
![]() | |||
標準レイアウト型 | N2342 | ![]() |
![]() | |||
デフォルト定義関数 | N2346 | ![]() |
![]() | |||
削除済み関数 | N2346 | ![]() |
![]() | |||
拡張フレンド宣言 | N1791 | ![]() |
![]() | |||
sizeof の拡張
|
N2253 DR850 |
![]() |
![]() | |||
インライン名前空間 | N2535 | ![]() |
![]() | |||
無制限共用体 | N2544 | ![]() |
![]() | |||
テンプレート引数としてのローカル型および無名型 | N2657 | ![]() |
![]() | |||
範囲ベースの for | N2930 | ![]() |
![]() | |||
明示的な仮想オーバーライド | N2928 N3206 N3272 |
![]() |
![]() | |||
ガベージ コレクションと到達可能性ベースのリーク検出の最低限サポート | N2670 | |||||
移動コンストラクタで例外を送出可能 [noexcept] | N3050 | ![]() |
![]() | |||
移動用の特殊なメンバ関数の定義 | N3053 | ![]() |
![]() | |||
同時実行 | ||||||
シーケンス ポイント | N2239 | |||||
アトミック操作 | N2427 | ![]() |
![]() | |||
厳密な比較および交換 | N2748 | ![]() |
![]() | |||
双方向フェンス | N2752 | ![]() |
![]() | |||
メモリ モデル | N2429 | |||||
データ依存関係の順序付け: アトミック操作とメモリ モデル | N2664 | |||||
例外の伝播 | N2179 | ![]() |
![]() | |||
シグナル ハンドラでアトミック操作を使用可能 | N2547 | ![]() |
![]() | |||
スレッドローカル記憶域 | N2659 | |||||
同時実行を考慮した動的初期化と破棄 | N2660 | ![]() |
![]() | |||
C++11 に含まれている C99 機能 | ||||||
定義済み識別子 __func__
|
N2340 | ![]() |
![]() | |||
C99 プリプロセッサ | N1653 | ![]() |
![]() | |||
long long 型
|
N1811 | ![]() |
![]() |
![]() | ||
拡張整数型 | N1988 | ![]() |
![]() |