本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

C++標準化員会の文書のレビュー: N4553-N4567

[PDF] N4553: Working Draft, C++ extensions for Concepts

コンセプトTSのドラフト

[PDF] N4554: Editor's report for the Concepts TS

コンセプトTSのドラフト編集者の報告書

[PDF] N4555: February 2016 WG21 Meeting

2016年1月に開催される会議の告知

N4556: WG21 telecon minutes

2015年10月9日に行われた電話会議の議事録。

N4557: WG21 2015-07-20 Telecon Minutes

2015年7月0日に行われた電話会議の議事録

N4558:WG21 2015-11 Kona Minutes (Draft)

2015年10月19日から24日にかけて行われたKona会議の議事録。

[PDF] N4559: Kona WG21 Minutes

2015年のKona会議の議事録のドラフト。

会議の参加者とその所属一覧が興味深い。

また、Appleが投票権を失ったとも書いてある。最近人を出していないからなのだろう。

[PDF] N4560: Working Draft, C++ Extensions for Ranges

軽量コンセプトを用いたRangeコンセプトライブラリの提案、Range TSのドラフト。Rrangeコンセプトを定義することにより、コンテナーを直接アルゴリズムに渡すことができる。

std::vector<int> v ;

// 従来のイテレーター
std::sort( begin(v), end(v) ) ;
// Rangeコンセプト
std::sort( v ) ;

[PDF] N4561: Ranges Editor's Report

Range TSの編集者の報告書。N4560はRange TSの最初のドラフトであり、その内容はP0021R0に由来する。

N4562: C++ Extensions for Library Fundamentals, Version 2, Working Draft

標準ライブラリの提案。

意味的なconst性をメンバー関数を経由しても伝えるpropagate_const、汎用的なBM検索、ある型のオブジェクトを格納しているか、格納していない状態を表すoptional, どんな型でも格納できるany, 異なる文字列表現をラップしてくれるstring_view, 新しいメモリ確保のインターフェースと、新しいヒープメモリ確保の実装、所有しないバカポインターobserver_ptr, コンテナーに対するフリー関数版のerase, araryの拡張, 汎用的なサンプリングアルゴリズムの実装、GCDとLCMの実装、簡単に使える乱数ライブラリrandint, ソースファイルの情報を取得できるsource_location。などなど

[PDF] N4564: C++ Extensions for Library Fundamentals, Version 2 PDTS

N4562と内容は同じ。

[PDF] N4565: Record of Response: National Body Comments ISO/IEC PDTS 19571 Technical Specification: C++ Extensions for Concurrency

Concurrency TSに対するNBコメントに対する返答。日本からは文面の誤りと、コンテナーをvectorに限定せずに汎用的にするコメントが出された。文面の誤りは採用された。コンテナーを汎用にする提案は拒絶された。

n4566: Editor's Report -- Working Draft, Standard for Programming Language C++

C++ドラフトの編集者の報告書。

興味深いcore issuesの解決は以下の通り。

Core issue 1722が解決された。

lambda式のクロージャーオブジェクトの関数ポインターへの変換関数は無例外保証(noexcept(true))を持つようになった。

// 無例外保証
void (*ptr)() = []{} ; 

Core issue 1949が解決された。

規格は、AがBより先に処理されるという意味の、"A sequenced before B"という用語の意味を定義していて、この意味を表現する時はこの用語を統一して使うべきなのにもかかわらず、"B sequenced after A"なる表現がいくつかの箇所で見られるので、sequenced beforeに修正する。

core issue 2004の解決。

規格の文面を解釈すると、mutableなvariant memberがある場合に、constexprで型システムを壊して実行時書きかえができてしまう場合を修正。

  union U { int a; mutable int b; };
  constexpr U u1 = {1};
  int k = (u1.b = 2); // OK, bはmutable
  constexpr U u2 = u1; // おおっと?

core issue 2024を解決。pack expansionがテンプレートに依存するように規定する文面がないことを修正。こんな例が見逃されていたとは以外。

core issue 2026を解決。定数初期化にもゼロ初期化が行われるように解釈できる文面を修正。定数初期化ではゼロ初期化は行われず、明示的に初期化されない定数初期化は違法になるという従来の挙動を維持。これも考えると以外な見逃しだ。

core issue 2031の解決。C++11ではリファレンス修飾子として&&を追加したが、これは従来の演算子の&&と互換性の問題を発生させるコード例が見つかったので、それを互換性の項目に付け加える修正。

以下のようなコードが該当する。

  struct Struct { template <typename T> operator T(); };
  bool example_1 = new int && false;               // #1
  bool example_2 = &Struct::operator int && false; // #2

C++03では、#1,2ともに、&&は演算子であり、合法である。C++11では、リファレンス修飾子となるため、違法である。

まあ、まず書かないようなコードだ。

core issue 2052の解決。特殊化の結果生成されたシグネチャが組み込み演算子と同じだった場合を違法にする。

その他のドラフト入りしたコア言語の変更点。

registerキーワードの廃止, operator++(bool)の廃止。例外指定を型システムに取り込む変更、__has_includeの追加、非staticデータメンバーの宣言箇所における初期化に対して、default member initializerという名前をつける文面の変更、継承コンストラクターの文面の書き直し。

ライブラリの変更点としては、Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17を追加したのがとても大きい。また、Variadic lock_guard (Rev. 2)も入った。

[PDF] N4567: Working Draft, Standard for Programming Language C++

現時点で最新のC++ドラフト規格。

ドワンゴ広告

新年初出社。

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

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

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