読者です 読者をやめる 読者になる 読者になる

C++0x 標準ライブラリのconstexpr対応

C++

C++0xのconstexprは、コンストラクタやその他のメンバ関数にも指定することができます。
これがあると、

constexpr pair<int, int> p(1, 2);

のようにconstexprを付けて定義した変数をコンパイル時定数として扱うことができ、
pairのoperator+がconstexprだったりすると

constexpr pair<int, int> r = p1 + p2;

も定数式になります。


このような対応を、C++0xの標準ライブラリでも行おうという提案が出ていて、
現時点ではいくつかのクラスのデフォルトコンストラクタのみ対応することが決まっています。

pair
tuple
unique_ptr
shared_ptr
weak_ptr
enable_shared_from_this
mutex
istream_iterator
istreambuf_iterator
duration

スマートポインタのデフォルトコンストラクタがconstexprになると
スマートポインタのヌルポインタをコンパイル時定数として扱えるようになります。
(今のところ何に使うかはわからないですが)


また、以下のライブラリはcostexprでの演算もサポートするべきですが、
こちらはコア言語側の仕様が固まったら対応するそうです。

pair
tuple
duration

(durationはN3000時点ですでにかなり対応されてますが、おそらく間違い)



修正&追記:
auto_ptrはdeprecated(互換性のために残されているが非推奨)扱いなので
constexpr対応はしません。



N2994 constexpr in the library: take 2

C++0x言語拡張まとめ