標準ライブラリのどの部分にconstexprとマークされますか?私はC++ 14、N3690のために見てきたドラフトから
、以下は(C++ 11標準と比較して)これまでconstexpr
に変更されます&短剣;:
std::error_category
のデフォルトコンストラクタ
std::forward
std::move
std::move_if_noexcept
std::pair
のすべての演算子の比較
std::get
std::pair
とstd::tuple
のすべての演算子の比較。
std::make_tuple
std::tuple
のオペレータ比較
std::optional
のすべてのオペレータの比較
std::optional
のコンストラクタのすべてのすべての
std::bitset
や他のコンテナのための
operator[]
とsize
を(移動のために保存)。
std::complex
のオペレータ比較
&短剣のすべて。 私は手動でこれをしなかったので、あなたはいくつかのエラーを期待することができます:(
あなたがチェックすることができ
constexpr
の追加の他、おそらくより正確なリストについては
:N3469、N3470、およびN3471
他の部分をマークすることができ
constexprの?
constexpr
(std::numeric_limits
評価、std::tuple
とstd::pair
construc可能性のもののほとんどはtorsなど)は、C++ 11標準ですでにconstexpr
とマークされていました。 std::ratio
の時点および他のコンポーネントがconstexpr
とマークされていないが、N3469で修正されたバグがありました。
constexpr
追加の恩恵を受けるものはstd::initializer_list
となるでしょう。これは今回は何も起こりませんでした(それを許可する提案があるかどうかわかりません)。
下位互換性の理由はありませんか?
これは拡張あるので、そのまま古いコードはまだコンパイルされ、何も今病気に形成されていないため、ほとんどのものが壊れたことはありません。しかし、それがなかった古いものにconstexpr
を追加すると、予期していないと驚くべき結果が得られます。provided here(Thanks TemplateRex)
好奇心が強い人は、libC++を見れば分かりますが、C++ 14のconstexpr-isationの作業は進行中です。 @MatthieuM。 –
tnxでは、SVNトランクは確かにいくつかの 'C++ 14でのconstexpr'コメントを持っています。 – TemplateRex