2016-09-12

C++標準化委員会の文書: P0411R0-P0417R0

P0411R0: Separating Library Requirements and Preconditions

現在、標準ライブラリの関数にはrequires paragraphに関数の呼び出し元が満たすべき条件が記述されている。これは、17.6.4.11で規定されている。「requires paragraphに記述されたpreconditionsに違反すると挙動は未定義」とされている。

ところで、現在のrequires paragraphには、preconditionsの他にも、様々な制約が書かれている。中にはコンパイル時にメタプログラミングでチェックできるものもあり、実際にメタプログラミングでコンパイル時チェックをしてコンパイル時エラーを出すことを規定している部分もある。これらが全て未定義の挙動であるとすると、せっかくコンパイル時チェックをしているのに意味がない。

そこで、requires paragraphを、requires paragraphと、preconditions paragraphに分割する。requiresに違反した場合はill-formedとなる。preconditionsに違反した場合は、未定義の挙動となる。

文書はすでに、標準ライブラリのすべてのrequiresに対する文面案を完備している。たいへん地道な作業が行われたのだろう。

[PDF] P0413R0:

Parallerism TSが規格入りしたが、すでにTSの方では修正されている識別子の変更は、自動的に反映されずに、明示的にCDに対して変更を提案しなければならない。その変更のための提案文書。

P0414R0: Merging shared_ptr changes from Library Fundamentals to C++17

Library Fundamentals TSを規格にマージするにあたって、shared_ptr周りの変更案が現行の規格の文面とコンフリクトを起こしたため変更を保留されていた。現行の文面に対する変更案を作りなおして提案。

[PDF] P0416R0: Operator Dot (R3)

operator .の改定案。指摘された問題を認識して修正したようだが、文面案がない。文面案がないと評価しようがない。

P0417R0: ISO 10646:2014

C++標準規格が参照しているUCS規格であるISO/IEC 10646-1:1993をISO/IEC 10646:2014に変更する提案。

ISO/IEC 10646は、Information technology — Universal Coded Character Set (UCS)で、いわゆるUnicodeとそのエンコード方式(ISO規格ではUnicodeという名称は使っていない)。1993年のUCS規格では、まだエンコード規格はUCS-2とかUCS-4と呼ばれていて、UTF-8, UTF-16, UTF-32という用語は存在しなかった。そのため、C++規格は参照先の規格で定義されていない用語をこれまで使っていたことになる。

ドワンゴ広告

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

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

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

1 comment:

Anonymous said...

今回は少ないなーと思ったら2個目だったようで。お疲れ様でーす。