真面目に学業をした。課題は図書館で、研究は研究室でという風に場所と作業とを結びつけるようにすることを試みており、今日はその成果か久しぶりに一日だいぶ集中できた。
試しに甘いものを摂るようにしてみたのも良かったかもしれない。小遣いが勿体なくてあまり昼飯と飲み物以上の買い食いをしないのだが、本当は十分に頭を動かすためにもっと積極的にお菓子とか食べているべきな可能性がある。ジュース類で糖分を摂取するのには限界がある。
筋トレをした。今日は腕立て。なんか前より少しできるようになっている気がした。
cpprefjpを読み進めた。
構造化束縛を拡張して通常の変数宣言のように使用できるようにする
やろうとも思わなかったが、C++17ではできなかったんだ。なんでやろうと思わなかったかと言えば、恐らく構造化束縛は基本的に分解する用途であって、それはローカル変数であることが殆どだからだと思われる。
構造化束縛した変数の参照キャプチャを許可
え~それ出来なかったの。それは出来て欲しい。妥当な改訂。
構造化束縛がカスタマイゼーションポイントを見つけるルールを緩和
そもそも.get
で構造化束縛の挙動を定義できるの自体を認識してなかった。構造化束縛の項読んだはずなのに…と思ったが知ってるものと思ってちゃんと読んでなかったようだ。ちゃんと書いてあった。
それはそうと確かにこれは正しい改訂。しかしそもそも構造化束縛という言語機能とget
という特定の識別子名が紐づいているのもなあという気もする。それを言ったら範囲forもそうか。
未初期化領域への暗黙的なオブジェクト構築
要は、今までCなら問題ないけどC++だと厳密には未定義動作だったものを未定義動作でないと明確化するための規定のようだ。Cとの界面は色々と面倒が多い。
やりたいことは分かったがちょっと細かいところまで確認しきれない。メモリ周りのライブラリとかまで読んだ後でもう一回読み込もうと思う。
暗黙のラムダキャプチャを簡略化
項目名が575だ
それはさておき、あまり主旨がよく分からない。今まで評価されない文脈で出てきた場合でもクロージャオブジェクトのメンバになることになっていたが、評価されないならクロージャオブジェクトのメンバにはならないようになったという話だろうか。しかしそれならなぜ記事名として「簡略化」などと言っているんだ?
書いてあるコードは何やらGCC12だと通らず、clang15だと通った。GCCだとr2はfloat &
になっている。ますます訳がわからん。
指示付き初期化
これは知っていた。C言語と合わせるためというのは知っていたが、互換性のない部分は順序の強制だけではないらしい。
抽象型のチェック
今一つなんでこの仕様を導入したか動機が分からない。導入して困る仕様でもないが。
属性の名前空間を予約
処理系が独自に属性を定義するときはちゃんと名前空間に囲えというお達しのようだ。C++11から6年の間にこれを犯していた処理系はなかったのだろうか。
定数式内での共用体のアクティブメンバの変更を許可
std::string
などをconstexpr
化するための布石らしい。これで一応constexpr std::string
が通るようになったようだ。std::string
のどこで共用体を使っているんだ?
定数式でのdynamic_cast
、多態的なtypeid
を許可
コンパイラはもう動的型をコンパイル時に追跡し続けるようになってしまったので禁止する理由がなくなってしまった、みたいな話らしい。コンパイラの実装側も大変だ。
Categories: 未分類