在我看來,他們應該是有條件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)));
這意味着它們將不會被用於常見用例。但是如果你創建一個Rep
這是一個可能(例如)拋出溢出的算術模擬器,那麼這些構造函數將不會是noexcept
。
爲了使這些構造函數的實際工作中,成員函數count()
必須是有條件noexcept
,並duration_cast
需要有條件noexcept
做出的功能。
現在(並且只有現在)人們可以開始用類似的嚴謹來解決time_point
構造函數。
這都是可行的。我剛剛製作了原型,以確認我實際上在回答中提供了很好的信息。然而,要做到這一切,必須:
- 執行並充分測試整個事情。
- 撰寫一份令人信服的建議,認爲這是可實施的,對客戶有價值。
- 參加標準會議並提出此建議,並具有說服力。
- 當委員會在您的論點中找到漏洞(他們會),修復實施,修復提案並返回步驟3.
- 繼續執行步驟3和4,直到委員會聽到你說他們放棄並將它投票寫入標準草案。
- 等待草案成爲官方標準,並保護建議在等待時被拋出標準。
到目前爲止,委員會已經非常謹慎地應用了條件noexcept
。
答案在標題的問題很簡單:
沒有人把所有這些工作納入它。不過,我會鼓勵 的人這樣做。我相信這將有益於 <chrono>
的客戶。