yohhoyの日記

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

2023-12-01から1ヶ月間の記事一覧

std::views::filter適用後の値書換えには要注意

C++

C++標準ライブラリ提供レンジアダプタstd::views::filter適用後の要素に対する変更操作には十分留意すること。変更操作により要素がフィルタ条件を満たさなくなる場合、C++ライブラリ仕様上は未定義動作(undefined behavior)を引き起こす。この問題は遅延評…

Living Dead/Zombie in C++ Standard

C++

プログラミング言語C++標準規格の索引(Index)に紛れ込むリビングデッド。*1 brains names that want to eat your, [zombie.names]living dead name of, [zombie.names] https://github.com/cplusplus/draft/commit/e844e0f45550eb0bf11ea262e4abd8a5403f47d4…

厳格な式の評価順序 for C2y

C C2y

プログラミング言語Cの次期仕様C2yに向けて、式の評価順序を厳格に規定する提案 N3203 Strict order of expression evaluation が提出されている。チャレンジングなお話。C言語(C++も同様)では歴史的経緯から、演算子オペランドの評価順*1や関数実引数リス…

飽和演算サポート @ C++26

C++2c(C++26)標準ライブラリに追加される飽和演算(saturation arithmetic)サポートについてメモ。 // C++2c <numeric>ヘッダ namespace std { // T,U = 符号付き整数型 or 符号無し整数型 template<class T> constexpr T add_sat(T x, T y) noexcept; template<class T> constexpr T sub</class></class></numeric>…

異種クラス同名メンバ関数の個別オーバーライド

C++

プログラミング言語C++において、異なる基底クラスに属する同名メンバ関数*1を個別にオーバーライドする方法。 // 同名メンバ関数をカスタマイズポイントとして提供する // 互いに無関係なインタフェースクラス struct Interface1 { virtual void process() …

NEO assertマクロ

プログラミング言語C/C++の次期標準規格C2x(C23)およびC++2c(C++26)では、アサーションマクロassertの改善が行われる。 #include <assert.h> // C/C++ #include <cassert> // C++のみ int is_valid(int); assert( "42 shall be vaild", is_valid(42) ); // NG: C17/C++20現在 //</cassert></assert.h>…