C++標準化委員会の文書のレビュー: N5410-N5419
N4510: Minimal incomplete type support for standard containers, revision 4
vector, list, forward_listに対して、非完全形を要素型に認める提案。
以下のようなコードが書けるようになる。
struct Node
{
std::vector< Node > nodes ;
// ...
} ;
クラスは定義の終了を持って完全形となるので、この場合のvectorに渡すNode型は不完全型である。つまり、sizeofが取れないなどの問題がある。しかし、不完全型をサポートする実装は可能であり、このコードは実装によって通ったり通らなかったりしていた。
上記のパターンのコードは利用価値があることから、これを認める提案。まず、最も無難なコンテナーに限って認める。
N4511: Adding [nothrow-]swappable traits (Revision 1)
<type_traits>にstd::is_swappable<T>, std::is_swappable_with<T, U>, std::is_nothrow_swappable<T>, std::is_nothrow_swappable_with<T, U>を追加する提案。
N4512: Multidimensional bounds, offset and array_view, revision 7
連続したストレージを多次元配列に見せかけるラッパーライブラリ、array_viewの提案。前回の提案N4494に比べて、細かな変更が加えられている。
[PDF注意] N4513: Technical Specification for C++ Extensions for Transactional Memory
トランザクショナルメモリーTSのドラフト
[PDF注意] N4514: Technical Specification for C++ Extensions for Transactional Memory
トランザクショナルメモリーTS。内容はドラフトと同じ。
N4515: Editor's Report: Technical Specification for C++ Extensions for Transactional Memory
トランザクショナルメモリーの編集者による変更点の報告書。
[PDF注意] N4516: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4516.pdf
ライブラリベースの型安全なunionライブラリ、variantの提案。boost.variantの機能削減版といったところだ。
なお、このvariantは空状態を許容する。理由は、別の型のオブジェクトを代入された時に、元の型のオブジェクトを破棄した後で、代入に失敗した時の状態をどうするのかと考えると、空の状態を許容する設計になったそうだ。
[PDF注意] N4517: Record of Response: National Body Comments ISO/IEC PDTS 19841
トランザクショナルメモリーTSに対するNBコメントに対する返答。
N4518: Make exception-specifications be part of the type system, version 2
例外指定を型の一部に含める提案。現状では、例外指定はポインター同士の代入を制限すると規定されている。しかし、ポインターのポインターを介せば、例外の異なる関数へのポインター型が相互に代入できてしまう。
たとえば、core issue 92は以下のようなコードを問題視している。
void (*p)() throw(int);
void (**pp)() throw() = &p; // not currently an error
これに対し、対応はしないと結論したものの、やはりなにかおかしい。
N4519: Source-Code Information Capture
ソースファイルの情報を取得できるリフレクションライブラリの提案、__LINE__などのようなプリプロセッサーで取得していた情報が、まともな方法で取得できるようになる。
#include <experimantal/source_location>
int main()
{
auto sl = std::experimental::source_location::current() ;
std::cout
<< sl.line() << '\n'
<< sl.column() << '\n'
<< sl.file_name() << '\n'
<< sl.function_name() << std::endl ;
}
source_location::currentは、呼び出した場所のsource_locationオブジェクトを返すconstexpr staticメンバー関数である。
なお、source_location::currentをデフォルト実引数で呼び出した場合、呼び出し元の情報が得られる。
void logger( std::experimantal::source_location sl = std::experimental::source_location::current() )
{
// slにはlogger関数を呼び出した元の情報が入る。
}
ドワンゴ広告
最近、ドワンゴがかなりガチな3DCGエンジニアを募集しているようだ。
【新規事業】3DCGエンジニア(正社員)|募集職種一覧|採用情報|株式会社ドワンゴ
ドワンゴは本物のC++プログラマーを募集しています。
CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0