C++17の新機能予定

C++17、およびTechnical Speficicationに採択された提案文書。

コア言語

template<typename... Args>
bool f(Args... args) { 
    return (true + ... + args);
} 

ライブラリ

template <class... Args>
pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);
template <class... Args>
pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); 
template <class... Args>
iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args);
template <class... Args>
iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args);
template <class M>
pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj);
template <class M>
pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj);
template <class M>
iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj);
template <class M>
iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj);

Parallelism TS

Library Fundamentals TS

Library Fundamentals TS 2

Transactional Memory TS

その他、承認された変更

  • N4230で、入れ子になった名前空間の定義を、namespace A::B::C {}と書けるようにする。意味としてはnamespace A { namespace B { namespace C { }}}を短く書けるようにしただけ。
  • N3922で、よく落とし穴になっていたauto x{y};の意味を変更し、yの型を推論するようにした。これまでは驚くことに、xinitializer_listと推論されていた。
  • N4086で、トライグラフを 削除する ことにした。
  • N4190で、非推奨になっていた機能をC++17の標準ライブラリから 削除する
    • auto_ptrbind1st/bind2ndptr_fun/mem_fun/mem_fun_refrandom_shuffle、その他いくつか。

boostjp/cpprefjpサイトを、GitHub Pagesに移行します

これまで、boostjpとcpprefjpの両サイトはGoogle Sites上で運営を行っていましたが、GitHub Pagesに移行しようと思います。

旧サイト (Google Sites):

新サイト (GitHub Pages):

編集用のGitHubリポジトリ

GitHubリポジトリでMarkdownドキュメントを編集すると、GitHub Pagesのhtmlに即時変換して反映されるようにしてあります。 その運営ツールは、cpprefjpのGitHubリポジトリにあります。用意してくれた id:melpon に感謝です。

移行の詳細は、cpprefjp GitHubリポジトリのアナウンスIssueを参照してください。

また、それに伴い、boostjp Google Groupの運営を終了しました。

今後とも、boostjp、cpprefjpの両サイトをよろしくお願いします。皆さまのコントリビュートをお待ちしております。

Effective Modern C++の予約開始

Scott Meyersの著書『Effective C++』のC++11とC++14対応である『Effective Modern C++ (略称EMC++)』の予約が開始しました。発売は12月4日になっています。

副題は「42 Specific Ways to Improve Your Use of C++11 and C++14」、日本語だと「C++11とC++14の使い方を改善する42の方法」といったところでしょうか。

書籍『From Mathematics to Generic Programming』

おもしろそうな本が出るなぁと思ってなんとなく読んでいたら、共著者の一人がAlexander Stepanovでした。STLの設計者です。

そういえば彼の著書である『Elements of Programming (邦訳:プログラミング原論)』もまだ読んでなかった。

Boost 1.57.0リリース

Boost 1.57.0がリリースされました。

リリースノートの日本語訳を、boostjpのGitHubリポジトリで公開しています。(boostjpのGoogle Siteには未反映)

今回は大きな変更はありませんが、以下の機能拡張がうれしいですね。

  • Boost.Moveに、C++03でも使えるunique_ptrが入った。(元々Interprocessにあったものを正式化)
  • Boost.Containerに、std::initializer_listのサポートが入った。

Boost 1.57.0のリリースノート翻訳を開始します

Boost 1.57.0のBetaがリリースされ、本リリースが近づいてきているので、恒例のリリースノート翻訳を開始します。

現在、boostjpサイトは作業環境をGitHubに移行中のため、まだサイトの方に反映はできないのですが、ひとまずboostjp/siteリポジトリにMarkdownでリリースノートを書き、GitHub上のプレビューで読めるようにしようと思います。

リポジトリは以下です:

Boost 1.57.0のリリースノートは以下です:

push権限を持っていない方は、pull requestをいただければ、そのあとに権限をお渡しします。GitHub上でこのファイルを直接編集するとpull requestを作成できるので、GitとGitHubに慣れていない方でも、気軽に編集していただければと思います。

1文字の誤字修正から、気軽にご参加ください。

valarray関係の未規定仕様を報告した

C++11で追加された以下のクラスのコピーコンストラクタの仕様がなかったので、報告しました。

  • slice_array
  • gslice_array
  • mask_array
  • indirect_array

提案仕様の文言は、libstdc++のドキュメントにあったのをそのまま送ったら、Daniel Krüglerさんが「この文言はちょっと曖昧だから」と直してくれました。

現状の実装仕様としては、「コピー元のxxx_arrayクラスオブジェクトが参照するvalarrayオブジェクトを、コピー先も参照する」です。

cpprefjp 次のマイルストーンは正規表現ライブラリ

cpprefjpサイトの次のマイルストーンは、正規表現ライブラリを作成します。

そのマイルストーンを達成するためのタスクリストを、GitHub Issuesとして作ってあります。

cpprefjp/siteリポジトリのメンバになっていてご協力いただける方は、タスクの担当をご自分に設定してください。現在メンバになっていない方で、新たにご協力いただければ、担当したいタスクのところにコメントをいただければと思います。

cpprefjp更新 数値ライブラリ完了

<complex>ヘッダと<valarray>ヘッダのリファレンス作成が完了しました。<complex>は、C++14の仕様にも対応してあります。

これによって、数値ライブラリ全体のリファレンス作成が完了しました。

標準ライブラリ全体としては、全52ヘッダ中、42ヘッダのリファレンス作成が完了しています。残りは、正規表現ライブラリ、ローカライズライブラリ、入出力ライブラリです。

次に何をやるかは、現在GitHubのIssueで意見を募集しています。

私はこのあと少しの間は、boostjpサイトの作業環境をGitHubに移行する準備を行います。