yohhoyの日記

技術的メモをしていきたい日記

2025-01-01から1年間の記事一覧

bit_castマクロ for C言語

C

プログラミング言語Cにおいて、ビット表現を維持したまま型変換を安全に行うマクロ。C++標準ライブラリのstd::bit_cast<To>(from)相当。本記事の内容はStackOverflowで見つけた質問と回答に基づく。 // C99 : 右辺値に未対応 #define bit_cast(T, ...) \ (*((T*)</to>…

C++ Standard Evolution Viewer

C++

プログラミング言語C++の国際標準規格(ISO/IEC 14882)バージョン間差分を、セクション別に確認できるWebサイト。 https://cppevo.dev/

C++26 std::execution

本文こちら→C++ MIX #16に参加しました - yohhoyの日記(別館)スライド資料:https://www.docswell.com/s/yohhoy/ZQXJ2E-cpp26-execution関連URL C++26 Executionライブラリ(基礎編) - yohhoyの日記 C++26 Executionライブラリ(Senderアルゴリズム編) -…

C++26 Executionライブラリ:非同期スコープ

C++2c(C++26)実行制御ライブラリ(execution control library)(→id:yohhoy:20250609)における非同期操作の早期開始と非同期スコープについて。Sender型で表現されたタスクチェインに対して、非同期操作の開始要求と完了待機を一括実施する遅延開始(lazy sta…

式static_assert in C言語

C C2y

プログラミング言語Cにおいて、式(expression)として扱えるコンパイル時アサートの実装例(C11以降)。*1 *22026-02-15追記:次期標準C2y向けに提案文書(PDF)N3715が採択され、関数形式マクロでの利便性向上を目的としてstatic_assert(cexp[, msg])構文を式(…

C++26 Executionライブラリ:Sender完了シグネチャ集合

C++2c(C++26)実行制御ライブラリ(execution control library)(→id:yohhoy:20250609)において、Sender型の完了シグネチャ集合(set of completion signatures)の宣言方法。[P3557R3採択後WD N5014*1準拠]自作SenderクラスMySenderの完了シグネチャ集合は、…

クラステンプレート特殊化型判定 @ C++26

プログラミング言語C++において、与えられた型があるクラステンプレートの特殊化(specialization)か否かを判定する方法。id:yohhoy:20220122のC++2c(C++26) Reflection(→id:yohhoy:20250305)バージョン。自明な実装で面白みはない... // C++2c(C++26) #inc…

constexpr Two-Step

C++20からサポートされたコンパイル時動的確保データを、コンパイル時定数としてプログラム実行時へと効率的に持ち越すテクニック。C++23現在の言語仕様では、コンパイルフェーズで動的確保(new)されたデータ領域はコンパイルフェーズにおいて解放(delete)さ…

C++26 Executionライブラリ:Cancellable Sender

C++2c(C++26)実行制御ライブラリ(execution control library)(→id:yohhoy:20250609)において、キャンセル可能なSenderの実装方法。実行制御ライブラリにおける非同期操作のキャンセルは、Receiver側で発行された停止要求(stop request)をSender側が明示的…

C++26 Executionライブラリ(コルーチン相互運用編)

C++2c(C++26)標準ライブラリに追加される実行制御ライブラリ(execution control library)についてメモ。別名:std::execution, Senders/Receivers(S/R)2025年5月現在、ベースライン提案文書P2300R10までを採択済み。 2025-07-20追記:2025年6月会合にて関連…

C++26 Executionライブラリ(Senderアルゴリズム編)

C++2c(C++26)標準ライブラリに追加される実行制御ライブラリ(execution control library)についてメモ。別名:std::execution, Senders/Receivers(S/R)2025年5月現在、ベースライン提案文書P2300R10までを採択済み。 2025-07-20追記:2025年6月会合にて関連…

C++26 Executionライブラリ(基礎編)

C++2c(C++26)標準ライブラリに追加される実行制御ライブラリ(execution control library)についてメモ。別名:std::execution, Senders/Receivers(S/R)2025年5月現在、ベースライン提案文書P2300R10までを採択済み。 2025-07-20追記:2025年6月会合にて関連…

配列要素数の取得 in 標準C

C C2y

プログラミング言語Cの次期標準C2yでは、配列要素数を安全に取得する_Countof演算子が導入される。オペランドに配列型を要求すること以外は、構文規則的にsizeof演算子とほぼ同じ。 // C2y int fibs[] = { 1, 1, 2, 3, 5, 8, 13, 21 }; static_assert(_Count…

Range挿入操作と要素オーバーラップ

C++

C++23標準ライブラリのシーケンスコンテナ*1に対するRange挿入操作では、挿入先コンテナと挿入元Rangeとの要素オーバーラップが{append,prepend}_range操作でのみ許容される。それ以外のメンバ関数で要素オーバーラップしていた場合は未定義動作(undefined b…

C++ Reflection(P2996R10)

次期C++2c(C++26)標準規格に向けて検討が進んでいる リフレクション(reflection) についてメモ。本記事の内容は提案文書 P2996R10 に基づく。2025-07-18追記:2025年6月会合にてP2996R13[言語コア機能とライブラリ]、および一連の関連提案P3560R2[エラー…

Expansion statement for C++

プログラミング言語C++の次期標準C++2c(C++26)向けに提案されている展開文(Expansion statement)について。template for構文をもちいて本体処理を反復的にコンパイル時展開する。2025-06-22追記:2025年6月会合にてP1306R5が採択され*1、C++2c言語仕様に展開…

サンプルコードによるC++23ジェネレータの紹介

C++

サンプルコードによるC++23ジェネレータの紹介本文こちら→C++ MIX #13に参加しました - yohhoyの日記(別館)スライド資料:https://www.docswell.com/s/yohhoy/KEXQPG-cpp23gen関連URL コルーチン×ラムダ式キャプチャ=鼻から悪魔 - yohhoyの日記 std::gene…

declcall演算子

プログラミング言語C++の次期標準C++2c(C++26)に導入されるdeclcall演算子についてメモ。declcall演算子は関数呼び出しを含む式をオペランドにとり、オーバーロード解決後の関数ポインタ/メンバ関数ポインタを返す定数式(constant expression)となる。この…

名前付きループ in 標準C

C C2y

プログラミング言語Cの次期標準C2yでは、名前付きループ(Named Loop)構文としてbreak/continue文へのラベル指定がサポートされる。 // C2y outer: for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { break; // 内部ループ脱出: 1)へ break oute…

8進数リテラルプレフィクス in 標準C

プログラミング言語Cの次期標準C2yでは、8進数リテラルプレフィクス0o/0Oが導入される。 // C2y int n1 = 0o52; // 42 int n2 = 0O52; // 42 int n0 = 052; // 42 (従来記法; 廃止予定) 0o/0Oプレフィクス追加と同時に、数値0のみプレフィクスとする従来8…