2017-11-20

C++標準化委員会の文書: P0735P0-P0769R0

P0735R0: P0735R0: Interaction of memory_order_consume with release sequences

memory_order_consumeがARMのとても弱いメモリーモデルでは実用的にならないのでなんとかしたいという文書。

P0737R0: P0737r0 : Execution Context of Execution Agents

現在のExecutor提案では実行媒体とかexecutorとか実行リソースについては考慮しているが、具体的なexecution contextについて考慮していない。とりあえず最低限の具体例を定める提案。

P0750R0: p0750r0: Consume

memory_order_consumeは未だにどのC++コンパイラーも実装していない。これは、C++のソースコードレベルでの依存と、ハードウェアでの依存に違いがあるためと、この業界でconsumeという用語の意味が一貫していないためだ。consumeを実装可能にするために色々と提案している文書。

P0752R0: std::vector Destruction Order

vectorの要素の破棄順序を自然にする提案。今まで規格でvectorの要素の破棄順序を規定していなかったので、実装ごとに差異があった。C++では破棄は構築の逆順に行われることが自然なので、vectorも配列やstd::arrayと同じく、末尾の要素から破棄される。

[PDF] P0753R1: Manipulators for C++ Synchronized Buffered Ostream

P0763R0のtypoを修正した。内容は同期バッファーでフラッシュをするかどうかを設定するマニピュレーターの提案

P0756R0: Lambda syntax should be more liberal in what it accepts

lambda-captureの制限緩和の提案。

現在、lambda-captureとして[&x, =]は誤りだ。正しくは[=, &x]。デフォルトキャプチャーの前に個別のキャプチャーを書くことはできない。

現在、lambda-captureとして[=, x]は誤りだ。正しくは[=]。デフォルトキャプチャーと同じ意味の個別のキャプチャーを書くことはできない。

しかし、これの意味は完全に曖昧製無く明らかであるし、初心者がハマる落とし穴であるので、制限緩和すべきであるという提案。

正しい。

P0757R0: regex_iterator should be iterable

filesystemのdirectory_iteratorはrangeとしても使える。

regex_iteratorもrangeとして振る舞うべきだという提案。

確かに、デフォルトコンストラクターが終端イテレーターになるタイプのイテレーターであれば、rangeにもなる。

[PDF] P0761R1: Executors Design Document

実行媒体を表現するExecutorについて。

[PDF] P0762R0: Concerns about expected<T, E> from the Boost.Outcome peer review

Boostのuncheckedの作者からexpectedに物申す文書。どうも些細な違いに思える。

P0766R1: Fixing small-ish functionality gaps in constraints

lambda式でrequires-clauseを使えるようにする提案。

P0767R0: P0767R0: Expunge POD

PODをdeprecated扱いにする提案。これまで規格でPOD型としていた部分はトリビアル型とし、初期化の文脈で「非POD型のグローバルオブジェクト」としていたところは「ユーザー提供コンストラクターで初期化されるグローバルオブジェクト」と書き直す。is_pod traitsはdeprecated扱いになりAnnex Dに移動する。

[PDF] P0768R0: Library Support for the Spaceship (Comparison) Operaton

operator <=>の標準ライブラリによる対応について。

operator <=>はこの前の会議で入ることがほぼ決定した等価比較と大小比較をいっぺんにできる演算子だ。

a == bのとき、a <=> bは0を返す。a < bのとき、a <=> bは<0を返す。a > bのときa <=> bは>0を返す。

また、戻り値は単なる整数型ではなく特別なクラス型で、大小比較できる場合はstd::strong_order, std::weak_order, std::partial_order、等価比較しかできない場合はstd::strong_equality, std::weak_equalityを返す。これらの型は派生関係でis-a関係を表現しているので、例えばstd::strong_orderはstd::weak_orderとしても使えるが逆はない。

大小比較が常にできてa == bのとき、常にf(a) == f(b)が成り立つのがstrong oder、成り立たないのがweak order

例えば文字列のcase insensitiveな比較は等しいと判断されても大文字小文字の違いがあるのでweak_order。

比較ができない値が存在する場合、partial order。

例えばIEEE-754の浮動小数点数はNaN, +0, -0があるのでpartial order。

この文書ではstd::strong_orderなどの標準ライブラリについて細かく定めている。ヘッダーファイルは<cmp>

[PDF] P0769R0: Add shift to <algorithm>

algorithmにshift_leftとshift_rightを追加する提案。

moveとmove_backwardと違い、同じレンジ内で操作する。rotateとは違う。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

No comments: