C++17の新機能予定
C++17、およびTechnical Speficicationに採択された提案文書。
コア言語
- N4259: Wording for std::uncaught_exceptions (Herb Sutter)
- 捕捉していない例外の数を取得する関数を追加する。
- N4261: Proposed resolution for Core Issue 330: Qualification conversions and pointers to arrays of pointers (Jens Maurer)
- ポインタの配列を、ポインタへのポインタに変換するときに、
const
修飾を許可する。
- ポインタの配列を、ポインタへのポインタに変換するときに、
- N4262: Wording for Forwarding References (Herb Sutter, Bjarne Stroustrup, Gabriel Dos Reis)
- Scott MeyersがUniversal References(普遍参照?)と呼んでいるものを、規格上Forwarding References(転送参照)と呼ぶことにする。
- N4266: Attributes for namespaces and enumerators (Richard Smith)
- 名前空間と列挙体の定義に、属性を付けられるようにする。
- N4267: Adding u8 character literals (Richard Smith)
- N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)
- 非型テンプレート引数の許可する静的演算を、いくつか追加。配列からポインタへの変換、関数ポインタの変換、修飾子の変換、
std::nullptr_t
からヌルポインタへの変換、std::nullptr_t
からヌルメンバポインタへの変換。
- 非型テンプレート引数の許可する静的演算を、いくつか追加。配列からポインタへの変換、関数ポインタの変換、修飾子の変換、
- N4285: Cleanup for exception-specification and throw-expression (Jens Maurer)
- 例外仕様と例外式の文面を整理
- N4295: Folding expressions (Andrew Sutton, Richard Smith)
- 可変引数テンプレートのパラメータパック全体を畳み込む演算を許可(foldのサポート)。たとえば以下のようなもの:
template<typename... Args> bool f(Args... args) { return (true + ... + args); }
ライブラリ
- N4258: Cleaning-up noexcept in the Library (Nicolai Josuttis)
noexcept
の指定を整理
- N4277: TriviallyCopyable reference_wrapper (Agustín Bergé)
reference_wrapper
をTriviallyCopyable
(memcpy
可能)であると規定する- 内部ではポインタを持ってるだけなので。
- N4279: Improved insertion interface for unique-key maps (Thomas Köppe)
- ユニークなmapのインタフェースに、
try_emplace()
とinsert_or_assign()
を追加する。
- ユニークなmapのインタフェースに、
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);
- N4280: Non-member size() and more (Riccardo Marcangelo)
- コンテナ用の非メンバ関数として、
size()
、empty()
、data()
を追加する。
- コンテナ用の非メンバ関数として、
- N4284: Contiguous Iterators (Jens Maurer)
- メモリが連続していることが保証されるイテレータの分類を追加する。
Parallelism TS
- N4275: Response to National Body comments for C++ Extensions for Parallelism (Hans-J. Boehm)
- 各国からのコメントに対する回答。
- N4276: Transform Reduce, an Additional Algorithm for C++ Extensions for Parallelism(Jared Hoberock)
transform_reduce()
,transform_exclusive_scan()
,transform_inclusive_scan()
を追加する。
Library Fundamentals TS
- N4270: Collected Edits to the Library Fundamentals TS (Alisdair Meredith)
- 文面の修正
- N4288: Strike string_view::clear from the Library Fundamentals TS (Alisdair Meredith)
basic_string_view
からclear()
メンバ関数を削除。
Library Fundamentals TS 2
- N4257: Delimited iterators (Mike Spertus, Nathan Wilson)
- 区切り文字指定で出力するイテレータを追加する。
ostream_joiner
クラス。
- 区切り文字指定で出力するイテレータを追加する。
- N4273: Uniform Container Erasure (Stephan T. Lavavej)
- remove-eraseイディオムをサポートする非メンバ関数を追加する。
- N4282: The World’s Dumbest Smart Pointer (Walter E. Brown)
- 生ポインタをスマートポインタのインタフェースで使える、「世界一バカなスマートポインタ」として、
observer_ptr
を追加する。 - 以前までは
exempt_ptr
(所有権を保持しないポインタ)という名前だったのが、名称変更された。
- 生ポインタをスマートポインタのインタフェースで使える、「世界一バカなスマートポインタ」として、
Transactional Memory TS
- N4272: Working Draft, Technical Specification for C++ Extensions for Transactional Memory (Michael Wong)
- ドラフト仕様。ほぼ空。
- N4265: Transactional Memory Support for C++: Wording (revision 3) (Jens Maurer, et al.)
- 最新仕様と変更履歴はこちら。
その他、承認された変更
- N4230で、入れ子になった名前空間の定義を、
namespace A::B::C {}
と書けるようにする。意味としてはnamespace A { namespace B { namespace C { }}}
を短く書けるようにしただけ。 - N3922で、よく落とし穴になっていた
auto x{y};
の意味を変更し、y
の型を推論するようにした。これまでは驚くことに、x
はinitializer_list
と推論されていた。 - N4086で、トライグラフを 削除する ことにした。
- N4190で、非推奨になっていた機能をC++17の標準ライブラリから 削除する。
auto_ptr
、bind1st
/bind2nd
、ptr_fun
/mem_fun
/mem_fun_ref
、random_shuffle
、その他いくつか。