私の謙虚な意見では、それらは条件付き noexcept
である必要があります。正しい状態を説明するには、 のコンストラクターをバックアップして説明する必要がありduration
ます。
まず、特別なコンストラクター: default と copy.
これらのコンストラクタは で正しく指定され= default
ます。つまり、基礎となるものrep
が特別なnoexcept
コンストラクターを持っている場合、duration
意志もそうです。それがまさに私たちが望んでいることです。
さてどうですか:
template <class Rep2>
constexpr explicit duration(const Rep2& r);
template <class Rep2, class Period2>
constexpr duration(const duration<Rep2, Period2>& d);
これらは現在のところありませんnoexcept
が、それらが呼び出す構造が である場合は、そうなるようにしたいと考えていますnoexcept
。例えば:
template <class Rep2>
constexpr explicit duration(const Rep2& r)
noexcept(is_nothrow_constructible<rep, Rep2 const&>{});
template <class Rep2, class Period2>
constexpr duration(const duration<Rep2, Period2>& d)
noexcept(noexcept(is_nothrow_copy_constructible<rep>{}) &&
noexcept(std::chrono::duration_cast<duration>(d)));
これは、一般的なユースケースを除いて、noexcept になることを意味します。ただし、Rep
(たとえば) オーバーフローでスローされる可能性のある算術エミュレーターである を作成すると、これらのコンストラクターは正しく になりませんnoexcept
。
これらのコンストラクターを実際に機能させるには、メンバー関数count()
を conditionallyにする必要がnoexcept
あり、関数を conditionally にするduration_cast
必要がありますnoexcept
。
今(そして今だけ)time_point
、同様の厳密さでコンストラクターに取り組み始めることができます。
これはすべて実行可能です。この回答で実際に良い情報を提供していることを確認するために、プロトタイプを作成しました。ただし、これをすべて std にするには、次のことを行う必要があります。
- 全体を実装して完全にテストします。
- これが実装可能であり、クライアントにとって価値があることを説得力を持って主張する提案を書きます。
- 標準化会議に出席してこの提案を提示し、説得力を持ってください。
- 委員会があなたの議論に穴を見つけたら (そして彼らはそうするでしょう)、実装を修正し、提案を修正して、ステップ 3 に戻ります。
- ステップ 3 と 4 を続けて、委員会があなたからの連絡にうんざりし、賛成票を投じて基準草案を作成します。
- ドラフトが公式の標準になるのを待ち、待っている間、提案が標準から外れるのを防ぎます。
今日まで、委員会はnoexcept
非常に控えめに機能に条件付きを適用してきました。
タイトルの質問に対する答えは簡単です:
このすべての作業をそれに投入した人は誰もいません。しかし、私は人々にそうすることを勧めます。これは のクライアントに利益をもたらすと信じています
<chrono>
。