diff --git a/date.h b/date.h index 71ff53b..26f8aa2 100644 --- a/date.h +++ b/date.h @@ -43,18 +43,21 @@ namespace date // MSVC's constexpr support is still a WIP, even in VS2015. // Fall back to a lesser mode to support it. // TODO: Remove this or retest later once MSVC's constexpr improves. -#if defined(_MSC_VER) && ! defined(__clang__) && ! defined( __GNUG__) +#if defined(_MSC_VER) # define CONSTDATA const # define CONSTCD11 # define CONSTCD14 +# define NOEXCEPT _NOEXCEPT #elif __cplusplus >= 201402 # define CONSTDATA constexpr # define CONSTCD11 constexpr # define CONSTCD14 constexpr +# define NOEXCEPT noexcept #else # define CONSTDATA constexpr # define CONSTCD11 constexpr # define CONSTCD14 +# define NOEXCEPT noexcept #endif //-----------+ @@ -108,87 +111,87 @@ class year_month_weekday_last; // date composition operators -CONSTCD11 year_month operator/(const year& y, const month& m) noexcept; -CONSTCD11 year_month operator/(const year& y, int m) noexcept; +CONSTCD11 year_month operator/(const year& y, const month& m) NOEXCEPT; +CONSTCD11 year_month operator/(const year& y, int m) NOEXCEPT; -CONSTCD11 month_day operator/(const day& d, const month& m) noexcept; -CONSTCD11 month_day operator/(const day& d, int m) noexcept; -CONSTCD11 month_day operator/(const month& m, const day& d) noexcept; -CONSTCD11 month_day operator/(const month& m, int d) noexcept; -CONSTCD11 month_day operator/(int m, const day& d) noexcept; +CONSTCD11 month_day operator/(const day& d, const month& m) NOEXCEPT; +CONSTCD11 month_day operator/(const day& d, int m) NOEXCEPT; +CONSTCD11 month_day operator/(const month& m, const day& d) NOEXCEPT; +CONSTCD11 month_day operator/(const month& m, int d) NOEXCEPT; +CONSTCD11 month_day operator/(int m, const day& d) NOEXCEPT; -CONSTCD11 month_day_last operator/(const month& m, last_spec) noexcept; -CONSTCD11 month_day_last operator/(int m, last_spec) noexcept; -CONSTCD11 month_day_last operator/(last_spec, const month& m) noexcept; -CONSTCD11 month_day_last operator/(last_spec, int m) noexcept; +CONSTCD11 month_day_last operator/(const month& m, last_spec) NOEXCEPT; +CONSTCD11 month_day_last operator/(int m, last_spec) NOEXCEPT; +CONSTCD11 month_day_last operator/(last_spec, const month& m) NOEXCEPT; +CONSTCD11 month_day_last operator/(last_spec, int m) NOEXCEPT; -CONSTCD11 month_weekday operator/(const month& m, const weekday_indexed& wdi) noexcept; -CONSTCD11 month_weekday operator/(int m, const weekday_indexed& wdi) noexcept; -CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, const month& m) noexcept; -CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, int m) noexcept; +CONSTCD11 month_weekday operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT; +CONSTCD11 month_weekday operator/(int m, const weekday_indexed& wdi) NOEXCEPT; +CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT; +CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, int m) NOEXCEPT; -CONSTCD11 month_weekday_last operator/(const month& m, const weekday_last& wdl) noexcept; -CONSTCD11 month_weekday_last operator/(int m, const weekday_last& wdl) noexcept; -CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, const month& m) noexcept; -CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, int m) noexcept; +CONSTCD11 month_weekday_last operator/(const month& m, const weekday_last& wdl) NOEXCEPT; +CONSTCD11 month_weekday_last operator/(int m, const weekday_last& wdl) NOEXCEPT; +CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, const month& m) NOEXCEPT; +CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, int m) NOEXCEPT; -CONSTCD11 year_month_day operator/(const year_month& ym, const day& d) noexcept; -CONSTCD11 year_month_day operator/(const year_month& ym, int d) noexcept; -CONSTCD11 year_month_day operator/(const year& y, const month_day& md) noexcept; -CONSTCD11 year_month_day operator/(int y, const month_day& md) noexcept; -CONSTCD11 year_month_day operator/(const month_day& md, const year& y) noexcept; -CONSTCD11 year_month_day operator/(const month_day& md, int y) noexcept; +CONSTCD11 year_month_day operator/(const year_month& ym, const day& d) NOEXCEPT; +CONSTCD11 year_month_day operator/(const year_month& ym, int d) NOEXCEPT; +CONSTCD11 year_month_day operator/(const year& y, const month_day& md) NOEXCEPT; +CONSTCD11 year_month_day operator/(int y, const month_day& md) NOEXCEPT; +CONSTCD11 year_month_day operator/(const month_day& md, const year& y) NOEXCEPT; +CONSTCD11 year_month_day operator/(const month_day& md, int y) NOEXCEPT; CONSTCD11 - year_month_day_last operator/(const year_month& ym, last_spec) noexcept; + year_month_day_last operator/(const year_month& ym, last_spec) NOEXCEPT; CONSTCD11 - year_month_day_last operator/(const year& y, const month_day_last& mdl) noexcept; + year_month_day_last operator/(const year& y, const month_day_last& mdl) NOEXCEPT; CONSTCD11 - year_month_day_last operator/(int y, const month_day_last& mdl) noexcept; + year_month_day_last operator/(int y, const month_day_last& mdl) NOEXCEPT; CONSTCD11 - year_month_day_last operator/(const month_day_last& mdl, const year& y) noexcept; + year_month_day_last operator/(const month_day_last& mdl, const year& y) NOEXCEPT; CONSTCD11 - year_month_day_last operator/(const month_day_last& mdl, int y) noexcept; + year_month_day_last operator/(const month_day_last& mdl, int y) NOEXCEPT; CONSTCD11 year_month_weekday -operator/(const year_month& ym, const weekday_indexed& wdi) noexcept; +operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT; CONSTCD11 year_month_weekday -operator/(const year& y, const month_weekday& mwd) noexcept; +operator/(const year& y, const month_weekday& mwd) NOEXCEPT; CONSTCD11 year_month_weekday -operator/(int y, const month_weekday& mwd) noexcept; +operator/(int y, const month_weekday& mwd) NOEXCEPT; CONSTCD11 year_month_weekday -operator/(const month_weekday& mwd, const year& y) noexcept; +operator/(const month_weekday& mwd, const year& y) NOEXCEPT; CONSTCD11 year_month_weekday -operator/(const month_weekday& mwd, int y) noexcept; +operator/(const month_weekday& mwd, int y) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator/(const year_month& ym, const weekday_last& wdl) noexcept; +operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator/(const year& y, const month_weekday_last& mwdl) noexcept; +operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator/(int y, const month_weekday_last& mwdl) noexcept; +operator/(int y, const month_weekday_last& mwdl) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator/(const month_weekday_last& mwdl, const year& y) noexcept; +operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator/(const month_weekday_last& mwdl, int y) noexcept; +operator/(const month_weekday_last& mwdl, int y) NOEXCEPT; // Detailed interface @@ -197,32 +200,33 @@ operator/(const month_weekday_last& mwdl, int y) noexcept; class day { unsigned char d_; + public: - explicit CONSTCD11 day(unsigned d) noexcept; + explicit CONSTCD11 day(unsigned d) NOEXCEPT; - day& operator++() noexcept; - day operator++(int) noexcept; - day& operator--() noexcept; - day operator--(int) noexcept; + day& operator++() NOEXCEPT; + day operator++(int) NOEXCEPT; + day& operator--() NOEXCEPT; + day operator--(int) NOEXCEPT; - day& operator+=(const days& d) noexcept; - day& operator-=(const days& d) noexcept; + day& operator+=(const days& d) NOEXCEPT; + day& operator-=(const days& d) NOEXCEPT; - CONSTCD11 explicit operator unsigned() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 explicit operator unsigned() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const day& x, const day& y) noexcept; -CONSTCD11 bool operator!=(const day& x, const day& y) noexcept; -CONSTCD11 bool operator< (const day& x, const day& y) noexcept; -CONSTCD11 bool operator> (const day& x, const day& y) noexcept; -CONSTCD11 bool operator<=(const day& x, const day& y) noexcept; -CONSTCD11 bool operator>=(const day& x, const day& y) noexcept; +CONSTCD11 bool operator==(const day& x, const day& y) NOEXCEPT; +CONSTCD11 bool operator!=(const day& x, const day& y) NOEXCEPT; +CONSTCD11 bool operator< (const day& x, const day& y) NOEXCEPT; +CONSTCD11 bool operator> (const day& x, const day& y) NOEXCEPT; +CONSTCD11 bool operator<=(const day& x, const day& y) NOEXCEPT; +CONSTCD11 bool operator>=(const day& x, const day& y) NOEXCEPT; -CONSTCD11 day operator+(const day& x, const days& y) noexcept; -CONSTCD11 day operator+(const days& x, const day& y) noexcept; -CONSTCD11 day operator-(const day& x, const days& y) noexcept; -CONSTCD11 days operator-(const day& x, const day& y) noexcept; +CONSTCD11 day operator+(const day& x, const days& y) NOEXCEPT; +CONSTCD11 day operator+(const days& x, const day& y) NOEXCEPT; +CONSTCD11 day operator-(const day& x, const days& y) NOEXCEPT; +CONSTCD11 days operator-(const day& x, const day& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const day& d); @@ -231,32 +235,33 @@ std::ostream& operator<<(std::ostream& os, const day& d); class month { unsigned char m_; + public: - explicit CONSTCD11 month(unsigned m) noexcept; + explicit CONSTCD11 month(unsigned m) NOEXCEPT; - month& operator++() noexcept; - month operator++(int) noexcept; - month& operator--() noexcept; - month operator--(int) noexcept; + month& operator++() NOEXCEPT; + month operator++(int) NOEXCEPT; + month& operator--() NOEXCEPT; + month operator--(int) NOEXCEPT; - month& operator+=(const months& m) noexcept; - month& operator-=(const months& m) noexcept; + month& operator+=(const months& m) NOEXCEPT; + month& operator-=(const months& m) NOEXCEPT; - CONSTCD11 explicit operator unsigned() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 explicit operator unsigned() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const month& x, const month& y) noexcept; -CONSTCD11 bool operator!=(const month& x, const month& y) noexcept; -CONSTCD11 bool operator< (const month& x, const month& y) noexcept; -CONSTCD11 bool operator> (const month& x, const month& y) noexcept; -CONSTCD11 bool operator<=(const month& x, const month& y) noexcept; -CONSTCD11 bool operator>=(const month& x, const month& y) noexcept; +CONSTCD11 bool operator==(const month& x, const month& y) NOEXCEPT; +CONSTCD11 bool operator!=(const month& x, const month& y) NOEXCEPT; +CONSTCD11 bool operator< (const month& x, const month& y) NOEXCEPT; +CONSTCD11 bool operator> (const month& x, const month& y) NOEXCEPT; +CONSTCD11 bool operator<=(const month& x, const month& y) NOEXCEPT; +CONSTCD11 bool operator>=(const month& x, const month& y) NOEXCEPT; -CONSTCD14 month operator+(const month& x, const months& y) noexcept; -CONSTCD14 month operator+(const months& x, const month& y) noexcept; -CONSTCD14 month operator-(const month& x, const months& y) noexcept; -CONSTCD14 months operator-(const month& x, const month& y) noexcept; +CONSTCD14 month operator+(const month& x, const months& y) NOEXCEPT; +CONSTCD14 month operator+(const months& x, const month& y) NOEXCEPT; +CONSTCD14 month operator-(const month& x, const months& y) NOEXCEPT; +CONSTCD14 months operator-(const month& x, const month& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const month& m); @@ -265,37 +270,38 @@ std::ostream& operator<<(std::ostream& os, const month& m); class year { short y_; + public: - explicit CONSTCD11 year(int y) noexcept; + explicit CONSTCD11 year(int y) NOEXCEPT; - year& operator++() noexcept; - year operator++(int) noexcept; - year& operator--() noexcept; - year operator--(int) noexcept; + year& operator++() NOEXCEPT; + year operator++(int) NOEXCEPT; + year& operator--() NOEXCEPT; + year operator--(int) NOEXCEPT; - year& operator+=(const years& y) noexcept; - year& operator-=(const years& y) noexcept; + year& operator+=(const years& y) NOEXCEPT; + year& operator-=(const years& y) NOEXCEPT; - CONSTCD11 bool is_leap() const noexcept; + CONSTCD11 bool is_leap() const NOEXCEPT; - CONSTCD11 explicit operator int() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 explicit operator int() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; - static CONSTCD11 year min() noexcept; - static CONSTCD11 year max() noexcept; + static CONSTCD11 year min() NOEXCEPT; + static CONSTCD11 year max() NOEXCEPT; }; -CONSTCD11 bool operator==(const year& x, const year& y) noexcept; -CONSTCD11 bool operator!=(const year& x, const year& y) noexcept; -CONSTCD11 bool operator< (const year& x, const year& y) noexcept; -CONSTCD11 bool operator> (const year& x, const year& y) noexcept; -CONSTCD11 bool operator<=(const year& x, const year& y) noexcept; -CONSTCD11 bool operator>=(const year& x, const year& y) noexcept; +CONSTCD11 bool operator==(const year& x, const year& y) NOEXCEPT; +CONSTCD11 bool operator!=(const year& x, const year& y) NOEXCEPT; +CONSTCD11 bool operator< (const year& x, const year& y) NOEXCEPT; +CONSTCD11 bool operator> (const year& x, const year& y) NOEXCEPT; +CONSTCD11 bool operator<=(const year& x, const year& y) NOEXCEPT; +CONSTCD11 bool operator>=(const year& x, const year& y) NOEXCEPT; -CONSTCD11 year operator+(const year& x, const years& y) noexcept; -CONSTCD11 year operator+(const years& x, const year& y) noexcept; -CONSTCD11 year operator-(const year& x, const years& y) noexcept; -CONSTCD11 years operator-(const year& x, const year& y) noexcept; +CONSTCD11 year operator+(const year& x, const years& y) NOEXCEPT; +CONSTCD11 year operator+(const years& x, const year& y) NOEXCEPT; +CONSTCD11 year operator-(const year& x, const years& y) NOEXCEPT; +CONSTCD11 years operator-(const year& x, const year& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year& y); @@ -305,35 +311,35 @@ class weekday { unsigned char wd_; public: - explicit CONSTCD11 weekday(unsigned wd) noexcept; + explicit CONSTCD11 weekday(unsigned wd) NOEXCEPT; explicit weekday(int) = delete; - CONSTCD11 weekday(const day_point& dp) noexcept; + CONSTCD11 weekday(const day_point& dp) NOEXCEPT; - weekday& operator++() noexcept; - weekday operator++(int) noexcept; - weekday& operator--() noexcept; - weekday operator--(int) noexcept; + weekday& operator++() NOEXCEPT; + weekday operator++(int) NOEXCEPT; + weekday& operator--() NOEXCEPT; + weekday operator--(int) NOEXCEPT; - weekday& operator+=(const days& d) noexcept; - weekday& operator-=(const days& d) noexcept; + weekday& operator+=(const days& d) NOEXCEPT; + weekday& operator-=(const days& d) NOEXCEPT; - CONSTCD11 explicit operator unsigned() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 explicit operator unsigned() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; - CONSTCD11 weekday_indexed operator[](unsigned index) const noexcept; - CONSTCD11 weekday_last operator[](last_spec) const noexcept; + CONSTCD11 weekday_indexed operator[](unsigned index) const NOEXCEPT; + CONSTCD11 weekday_last operator[](last_spec) const NOEXCEPT; private: - static CONSTCD11 unsigned char weekday_from_days(int z) noexcept; + static CONSTCD11 unsigned char weekday_from_days(int z) NOEXCEPT; }; -CONSTCD11 bool operator==(const weekday& x, const weekday& y) noexcept; -CONSTCD11 bool operator!=(const weekday& x, const weekday& y) noexcept; +CONSTCD11 bool operator==(const weekday& x, const weekday& y) NOEXCEPT; +CONSTCD11 bool operator!=(const weekday& x, const weekday& y) NOEXCEPT; -CONSTCD14 weekday operator+(const weekday& x, const days& y) noexcept; -CONSTCD14 weekday operator+(const days& x, const weekday& y) noexcept; -CONSTCD14 weekday operator-(const weekday& x, const days& y) noexcept; -CONSTCD14 days operator-(const weekday& x, const weekday& y) noexcept; +CONSTCD14 weekday operator+(const weekday& x, const days& y) NOEXCEPT; +CONSTCD14 weekday operator+(const days& x, const weekday& y) NOEXCEPT; +CONSTCD14 weekday operator-(const weekday& x, const days& y) NOEXCEPT; +CONSTCD14 days operator-(const weekday& x, const weekday& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const weekday& wd); @@ -345,15 +351,15 @@ class weekday_indexed unsigned char index_ : 4; public: - CONSTCD11 weekday_indexed(const date::weekday& wd, unsigned index) noexcept; + CONSTCD11 weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT; - CONSTCD11 date::weekday weekday() const noexcept; - CONSTCD11 unsigned index() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 date::weekday weekday() const NOEXCEPT; + CONSTCD11 unsigned index() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept; -CONSTCD11 bool operator!=(const weekday_indexed& x, const weekday_indexed& y) noexcept; +CONSTCD11 bool operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; +CONSTCD11 bool operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const weekday_indexed& wdi); @@ -364,14 +370,14 @@ class weekday_last date::weekday wd_; public: - explicit CONSTCD11 weekday_last(const date::weekday& wd) noexcept; + explicit CONSTCD11 weekday_last(const date::weekday& wd) NOEXCEPT; - CONSTCD11 date::weekday weekday() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 date::weekday weekday() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const weekday_last& x, const weekday_last& y) noexcept; -CONSTCD11 bool operator!=(const weekday_last& x, const weekday_last& y) noexcept; +CONSTCD11 bool operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT; +CONSTCD11 bool operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const weekday_last& wdl); @@ -383,34 +389,34 @@ class year_month date::month m_; public: - CONSTCD11 year_month(const date::year& y, const date::month& m) noexcept; + CONSTCD11 year_month(const date::year& y, const date::month& m) NOEXCEPT; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; + CONSTCD11 date::year year() const NOEXCEPT; + CONSTCD11 date::month month() const NOEXCEPT; - year_month& operator+=(const months& dm) noexcept; - year_month& operator-=(const months& dm) noexcept; - year_month& operator+=(const years& dy) noexcept; - year_month& operator-=(const years& dy) noexcept; + year_month& operator+=(const months& dm) NOEXCEPT; + year_month& operator-=(const months& dm) NOEXCEPT; + year_month& operator+=(const years& dy) NOEXCEPT; + year_month& operator-=(const years& dy) NOEXCEPT; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const year_month& x, const year_month& y) noexcept; -CONSTCD11 bool operator!=(const year_month& x, const year_month& y) noexcept; -CONSTCD11 bool operator< (const year_month& x, const year_month& y) noexcept; -CONSTCD11 bool operator> (const year_month& x, const year_month& y) noexcept; -CONSTCD11 bool operator<=(const year_month& x, const year_month& y) noexcept; -CONSTCD11 bool operator>=(const year_month& x, const year_month& y) noexcept; +CONSTCD11 bool operator==(const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 bool operator!=(const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 bool operator< (const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 bool operator> (const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 bool operator<=(const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 bool operator>=(const year_month& x, const year_month& y) NOEXCEPT; -CONSTCD14 year_month operator+(const year_month& ym, const months& dm) noexcept; -CONSTCD14 year_month operator+(const months& dm, const year_month& ym) noexcept; -CONSTCD14 year_month operator-(const year_month& ym, const months& dm) noexcept; +CONSTCD14 year_month operator+(const year_month& ym, const months& dm) NOEXCEPT; +CONSTCD14 year_month operator+(const months& dm, const year_month& ym) NOEXCEPT; +CONSTCD14 year_month operator-(const year_month& ym, const months& dm) NOEXCEPT; -CONSTCD11 months operator-(const year_month& x, const year_month& y) noexcept; -CONSTCD11 year_month operator+(const year_month& ym, const years& dy) noexcept; -CONSTCD11 year_month operator+(const years& dy, const year_month& ym) noexcept; -CONSTCD11 year_month operator-(const year_month& ym, const years& dy) noexcept; +CONSTCD11 months operator-(const year_month& x, const year_month& y) NOEXCEPT; +CONSTCD11 year_month operator+(const year_month& ym, const years& dy) NOEXCEPT; +CONSTCD11 year_month operator+(const years& dy, const year_month& ym) NOEXCEPT; +CONSTCD11 year_month operator-(const year_month& ym, const years& dy) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year_month& ym); @@ -422,20 +428,20 @@ class month_day date::day d_; public: - CONSTCD11 month_day(const date::month& m, const date::day& d) noexcept; + CONSTCD11 month_day(const date::month& m, const date::day& d) NOEXCEPT; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::day day() const noexcept; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::day day() const NOEXCEPT; - CONSTCD14 bool ok() const noexcept; + CONSTCD14 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const month_day& x, const month_day& y) noexcept; -CONSTCD11 bool operator!=(const month_day& x, const month_day& y) noexcept; -CONSTCD11 bool operator< (const month_day& x, const month_day& y) noexcept; -CONSTCD11 bool operator> (const month_day& x, const month_day& y) noexcept; -CONSTCD11 bool operator<=(const month_day& x, const month_day& y) noexcept; -CONSTCD11 bool operator>=(const month_day& x, const month_day& y) noexcept; +CONSTCD11 bool operator==(const month_day& x, const month_day& y) NOEXCEPT; +CONSTCD11 bool operator!=(const month_day& x, const month_day& y) NOEXCEPT; +CONSTCD11 bool operator< (const month_day& x, const month_day& y) NOEXCEPT; +CONSTCD11 bool operator> (const month_day& x, const month_day& y) NOEXCEPT; +CONSTCD11 bool operator<=(const month_day& x, const month_day& y) NOEXCEPT; +CONSTCD11 bool operator>=(const month_day& x, const month_day& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const month_day& md); @@ -446,18 +452,18 @@ class month_day_last date::month m_; public: - CONSTCD11 explicit month_day_last(const date::month& m) noexcept; + CONSTCD11 explicit month_day_last(const date::month& m) NOEXCEPT; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const month_day_last& x, const month_day_last& y) noexcept; -CONSTCD11 bool operator!=(const month_day_last& x, const month_day_last& y) noexcept; -CONSTCD11 bool operator< (const month_day_last& x, const month_day_last& y) noexcept; -CONSTCD11 bool operator> (const month_day_last& x, const month_day_last& y) noexcept; -CONSTCD11 bool operator<=(const month_day_last& x, const month_day_last& y) noexcept; -CONSTCD11 bool operator>=(const month_day_last& x, const month_day_last& y) noexcept; +CONSTCD11 bool operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT; +CONSTCD11 bool operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT; +CONSTCD11 bool operator< (const month_day_last& x, const month_day_last& y) NOEXCEPT; +CONSTCD11 bool operator> (const month_day_last& x, const month_day_last& y) NOEXCEPT; +CONSTCD11 bool operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT; +CONSTCD11 bool operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const month_day_last& mdl); @@ -469,16 +475,16 @@ class month_weekday date::weekday_indexed wdi_; public: CONSTCD11 month_weekday(const date::month& m, - const date::weekday_indexed& wdi) noexcept; + const date::weekday_indexed& wdi) NOEXCEPT; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::weekday_indexed weekday_indexed() const noexcept; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 bool ok() const NOEXCEPT; }; -CONSTCD11 bool operator==(const month_weekday& x, const month_weekday& y) noexcept; -CONSTCD11 bool operator!=(const month_weekday& x, const month_weekday& y) noexcept; +CONSTCD11 bool operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT; +CONSTCD11 bool operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const month_weekday& mwd); @@ -491,18 +497,18 @@ class month_weekday_last public: CONSTCD11 month_weekday_last(const date::month& m, - const date::weekday_last& wd) noexcept; + const date::weekday_last& wd) NOEXCEPT; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::weekday_last weekday_last() const noexcept; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; - CONSTCD11 bool ok() const noexcept; + CONSTCD11 bool ok() const NOEXCEPT; }; CONSTCD11 - bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept; + bool operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; CONSTCD11 - bool operator!=(const month_weekday_last& x, const month_weekday_last& y) noexcept; + bool operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const month_weekday_last& mwdl); @@ -516,39 +522,39 @@ class year_month_day public: CONSTCD11 year_month_day(const date::year& y, const date::month& m, - const date::day& d) noexcept; - CONSTCD14 year_month_day(const year_month_day_last& ymdl) noexcept; - CONSTCD14 year_month_day(const day_point& dp) noexcept; + const date::day& d) NOEXCEPT; + CONSTCD14 year_month_day(const year_month_day_last& ymdl) NOEXCEPT; + CONSTCD14 year_month_day(const day_point& dp) NOEXCEPT; - year_month_day& operator+=(const months& m) noexcept; - year_month_day& operator-=(const months& m) noexcept; - year_month_day& operator+=(const years& y) noexcept; - year_month_day& operator-=(const years& y) noexcept; + year_month_day& operator+=(const months& m) NOEXCEPT; + year_month_day& operator-=(const months& m) NOEXCEPT; + year_month_day& operator+=(const years& y) NOEXCEPT; + year_month_day& operator-=(const years& y) NOEXCEPT; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::day day() const noexcept; + CONSTCD11 date::year year() const NOEXCEPT; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::day day() const NOEXCEPT; - CONSTCD14 operator day_point() const noexcept; - CONSTCD14 bool ok() const noexcept; + CONSTCD14 operator day_point() const NOEXCEPT; + CONSTCD14 bool ok() const NOEXCEPT; private: - static CONSTCD14 year_month_day from_day_point(const day_point& dp) noexcept; + static CONSTCD14 year_month_day from_day_point(const day_point& dp) NOEXCEPT; }; -CONSTCD11 bool operator==(const year_month_day& x, const year_month_day& y) noexcept; -CONSTCD11 bool operator!=(const year_month_day& x, const year_month_day& y) noexcept; -CONSTCD11 bool operator< (const year_month_day& x, const year_month_day& y) noexcept; -CONSTCD11 bool operator> (const year_month_day& x, const year_month_day& y) noexcept; -CONSTCD11 bool operator<=(const year_month_day& x, const year_month_day& y) noexcept; -CONSTCD11 bool operator>=(const year_month_day& x, const year_month_day& y) noexcept; +CONSTCD11 bool operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT; +CONSTCD11 bool operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT; +CONSTCD11 bool operator< (const year_month_day& x, const year_month_day& y) NOEXCEPT; +CONSTCD11 bool operator> (const year_month_day& x, const year_month_day& y) NOEXCEPT; +CONSTCD11 bool operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT; +CONSTCD11 bool operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT; -CONSTCD14 year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept; -CONSTCD14 year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept; -CONSTCD14 year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept; -CONSTCD11 year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept; -CONSTCD11 year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept; -CONSTCD11 year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept; +CONSTCD14 year_month_day operator+(const year_month_day& ymd, const months& dm) NOEXCEPT; +CONSTCD14 year_month_day operator+(const months& dm, const year_month_day& ymd) NOEXCEPT; +CONSTCD14 year_month_day operator-(const year_month_day& ymd, const months& dm) NOEXCEPT; +CONSTCD11 year_month_day operator+(const year_month_day& ymd, const years& dy) NOEXCEPT; +CONSTCD11 year_month_day operator+(const years& dy, const year_month_day& ymd) NOEXCEPT; +CONSTCD11 year_month_day operator-(const year_month_day& ymd, const years& dy) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year_month_day& ymd); @@ -561,58 +567,58 @@ class year_month_day_last public: CONSTCD11 year_month_day_last(const date::year& y, - const date::month_day_last& mdl) noexcept; + const date::month_day_last& mdl) NOEXCEPT; - year_month_day_last& operator+=(const months& m) noexcept; - year_month_day_last& operator-=(const months& m) noexcept; - year_month_day_last& operator+=(const years& y) noexcept; - year_month_day_last& operator-=(const years& y) noexcept; + year_month_day_last& operator+=(const months& m) NOEXCEPT; + year_month_day_last& operator-=(const months& m) NOEXCEPT; + year_month_day_last& operator+=(const years& y) NOEXCEPT; + year_month_day_last& operator-=(const years& y) NOEXCEPT; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::month_day_last month_day_last() const noexcept; - CONSTCD14 date::day day() const noexcept; + CONSTCD11 date::year year() const NOEXCEPT; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::month_day_last month_day_last() const NOEXCEPT; + CONSTCD14 date::day day() const NOEXCEPT; - CONSTCD14 operator day_point() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD14 operator day_point() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; CONSTCD11 - bool operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD11 - bool operator!=(const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD11 - bool operator< (const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator< (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD11 - bool operator> (const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator> (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD11 - bool operator<=(const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD11 - bool operator>=(const year_month_day_last& x, const year_month_day_last& y) noexcept; + bool operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; CONSTCD14 year_month_day_last -operator+(const year_month_day_last& ymdl, const months& dm) noexcept; +operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; CONSTCD14 year_month_day_last -operator+(const months& dm, const year_month_day_last& ymdl) noexcept; +operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT; CONSTCD11 year_month_day_last -operator+(const year_month_day_last& ymdl, const years& dy) noexcept; +operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; CONSTCD11 year_month_day_last -operator+(const years& dy, const year_month_day_last& ymdl) noexcept; +operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT; CONSTCD14 year_month_day_last -operator-(const year_month_day_last& ymdl, const months& dm) noexcept; +operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; CONSTCD11 year_month_day_last -operator-(const year_month_day_last& ymdl, const years& dy) noexcept; +operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year_month_day_last& ymdl); @@ -626,55 +632,55 @@ class year_month_weekday public: CONSTCD11 year_month_weekday(const date::year& y, const date::month& m, - const date::weekday_indexed& wdi) noexcept; - CONSTCD14 year_month_weekday(const day_point& dp) noexcept; + const date::weekday_indexed& wdi) NOEXCEPT; + CONSTCD14 year_month_weekday(const day_point& dp) NOEXCEPT; - year_month_weekday& operator+=(const months& m) noexcept; - year_month_weekday& operator-=(const months& m) noexcept; - year_month_weekday& operator+=(const years& y) noexcept; - year_month_weekday& operator-=(const years& y) noexcept; + year_month_weekday& operator+=(const months& m) NOEXCEPT; + year_month_weekday& operator-=(const months& m) NOEXCEPT; + year_month_weekday& operator+=(const years& y) NOEXCEPT; + year_month_weekday& operator-=(const years& y) NOEXCEPT; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::weekday weekday() const noexcept; - CONSTCD11 unsigned index() const noexcept; - CONSTCD11 date::weekday_indexed weekday_indexed() const noexcept; + CONSTCD11 date::year year() const NOEXCEPT; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::weekday weekday() const NOEXCEPT; + CONSTCD11 unsigned index() const NOEXCEPT; + CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; - CONSTCD14 operator day_point() const noexcept; - CONSTCD14 bool ok() const noexcept; + CONSTCD14 operator day_point() const NOEXCEPT; + CONSTCD14 bool ok() const NOEXCEPT; private: - static CONSTCD14 year_month_weekday from_day_point(const day_point& dp) noexcept; + static CONSTCD14 year_month_weekday from_day_point(const day_point& dp) NOEXCEPT; }; CONSTCD11 - bool operator==(const year_month_weekday& x, const year_month_weekday& y) noexcept; + bool operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; CONSTCD11 - bool operator!=(const year_month_weekday& x, const year_month_weekday& y) noexcept; + bool operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; CONSTCD14 year_month_weekday -operator+(const year_month_weekday& ymwd, const months& dm) noexcept; +operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; CONSTCD14 year_month_weekday -operator+(const months& dm, const year_month_weekday& ymwd) noexcept; +operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT; CONSTCD11 year_month_weekday -operator+(const year_month_weekday& ymwd, const years& dy) noexcept; +operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; CONSTCD11 year_month_weekday -operator+(const years& dy, const year_month_weekday& ymwd) noexcept; +operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT; CONSTCD14 year_month_weekday -operator-(const year_month_weekday& ymwd, const months& dm) noexcept; +operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; CONSTCD11 year_month_weekday -operator-(const year_month_weekday& ymwd, const years& dy) noexcept; +operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year_month_weekday& ymwdi); @@ -688,61 +694,62 @@ class year_month_weekday_last public: CONSTCD11 year_month_weekday_last(const date::year& y, const date::month& m, - const date::weekday_last& wdl) noexcept; + const date::weekday_last& wdl) NOEXCEPT; - year_month_weekday_last& operator+=(const months& m) noexcept; - year_month_weekday_last& operator-=(const months& m) noexcept; - year_month_weekday_last& operator+=(const years& y) noexcept; - year_month_weekday_last& operator-=(const years& y) noexcept; + year_month_weekday_last& operator+=(const months& m) NOEXCEPT; + year_month_weekday_last& operator-=(const months& m) NOEXCEPT; + year_month_weekday_last& operator+=(const years& y) NOEXCEPT; + year_month_weekday_last& operator-=(const years& y) NOEXCEPT; - CONSTCD11 date::year year() const noexcept; - CONSTCD11 date::month month() const noexcept; - CONSTCD11 date::weekday weekday() const noexcept; - CONSTCD11 date::weekday_last weekday_last() const noexcept; + CONSTCD11 date::year year() const NOEXCEPT; + CONSTCD11 date::month month() const NOEXCEPT; + CONSTCD11 date::weekday weekday() const NOEXCEPT; + CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; - CONSTCD14 operator day_point() const noexcept; - CONSTCD11 bool ok() const noexcept; + CONSTCD14 operator day_point() const NOEXCEPT; + CONSTCD11 bool ok() const NOEXCEPT; }; CONSTCD11 bool -operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) noexcept; +operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; CONSTCD11 bool -operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) noexcept; +operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; CONSTCD14 year_month_weekday_last -operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept; +operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; CONSTCD14 year_month_weekday_last -operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept; +operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept; +operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept; +operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT; CONSTCD14 year_month_weekday_last -operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept; +operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; CONSTCD11 year_month_weekday_last -operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept; +operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; std::ostream& operator<<(std::ostream& os, const year_month_weekday_last& ymwdl); +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) inline namespace literals { -CONSTCD11 date::day operator "" _d(unsigned long long d) noexcept; -CONSTCD11 date::year operator "" _y(unsigned long long y) noexcept; +CONSTCD11 date::day operator "" _d(unsigned long long d) NOEXCEPT; +CONSTCD11 date::year operator "" _y(unsigned long long y) NOEXCEPT; // CONSTDATA date::month jan{1}; // CONSTDATA date::month feb{2}; @@ -766,12 +773,14 @@ CONSTCD11 date::year operator "" _y(unsigned long long y) noexcept; // CONSTDATA date::weekday sat{6u}; } // inline namespace literals +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) //----------------+ // Implementation | //----------------+ // utilities +namespace detail { class save_stream { @@ -796,9 +805,6 @@ public: {} }; -namespace detail -{ - template struct choose_trunc_type { @@ -828,7 +834,7 @@ typename std::enable_if !std::chrono::treat_as_floating_point::value, T >::type -trunc(T t) noexcept +trunc(T t) NOEXCEPT { return t; } @@ -841,14 +847,12 @@ typename std::enable_if std::chrono::treat_as_floating_point::value, T >::type -trunc(T t) noexcept +trunc(T t) NOEXCEPT { using namespace std; using I = typename choose_trunc_type::type; CONSTDATA auto digits = numeric_limits::digits; -#if !defined(_MSC_VER) || (_MSC_VER >= 1900) static_assert(digits < numeric_limits::digits, ""); -#endif CONSTDATA auto max = I{1} << (digits-1); CONSTDATA auto min = -max; if (min <= t && t <= max && t != 0 && t == t) @@ -974,20 +978,20 @@ ceil(const std::chrono::time_point& tp) // day -CONSTCD11 inline day::day(unsigned d) noexcept : d_(static_cast(d)) {} -inline day& day::operator++() noexcept {++d_; return *this;} -inline day day::operator++(int) noexcept {auto tmp(*this); ++(*this); return tmp;} -inline day& day::operator--() noexcept {--d_; return *this;} -inline day day::operator--(int) noexcept {auto tmp(*this); --(*this); return tmp;} -inline day& day::operator+=(const days& d) noexcept {*this = *this + d; return *this;} -inline day& day::operator-=(const days& d) noexcept {*this = *this - d; return *this;} -CONSTCD11 inline day::operator unsigned() const noexcept {return d_;} -CONSTCD11 inline bool day::ok() const noexcept {return 1 <= d_ && d_ <= 31;} +CONSTCD11 inline day::day(unsigned d) NOEXCEPT : d_(static_cast(d)) {} +inline day& day::operator++() NOEXCEPT {++d_; return *this;} +inline day day::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} +inline day& day::operator--() NOEXCEPT {--d_; return *this;} +inline day day::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} +inline day& day::operator+=(const days& d) NOEXCEPT {*this = *this + d; return *this;} +inline day& day::operator-=(const days& d) NOEXCEPT {*this = *this - d; return *this;} +CONSTCD11 inline day::operator unsigned() const NOEXCEPT {return d_;} +CONSTCD11 inline bool day::ok() const NOEXCEPT {return 1 <= d_ && d_ <= 31;} CONSTCD11 inline bool -operator==(const day& x, const day& y) noexcept +operator==(const day& x, const day& y) NOEXCEPT { return static_cast(x) == static_cast(y); } @@ -995,7 +999,7 @@ operator==(const day& x, const day& y) noexcept CONSTCD11 inline bool -operator!=(const day& x, const day& y) noexcept +operator!=(const day& x, const day& y) NOEXCEPT { return !(x == y); } @@ -1003,7 +1007,7 @@ operator!=(const day& x, const day& y) noexcept CONSTCD11 inline bool -operator<(const day& x, const day& y) noexcept +operator<(const day& x, const day& y) NOEXCEPT { return static_cast(x) < static_cast(y); } @@ -1011,7 +1015,7 @@ operator<(const day& x, const day& y) noexcept CONSTCD11 inline bool -operator>(const day& x, const day& y) noexcept +operator>(const day& x, const day& y) NOEXCEPT { return y < x; } @@ -1019,7 +1023,7 @@ operator>(const day& x, const day& y) noexcept CONSTCD11 inline bool -operator<=(const day& x, const day& y) noexcept +operator<=(const day& x, const day& y) NOEXCEPT { return !(y < x); } @@ -1027,7 +1031,7 @@ operator<=(const day& x, const day& y) noexcept CONSTCD11 inline bool -operator>=(const day& x, const day& y) noexcept +operator>=(const day& x, const day& y) NOEXCEPT { return !(x < y); } @@ -1035,7 +1039,7 @@ operator>=(const day& x, const day& y) noexcept CONSTCD11 inline days -operator-(const day& x, const day& y) noexcept +operator-(const day& x, const day& y) NOEXCEPT { return days{static_cast(static_cast(x) - static_cast(y))}; @@ -1044,7 +1048,7 @@ operator-(const day& x, const day& y) noexcept CONSTCD11 inline day -operator+(const day& x, const days& y) noexcept +operator+(const day& x, const days& y) NOEXCEPT { return day{static_cast(x) + static_cast(y.count())}; } @@ -1052,7 +1056,7 @@ operator+(const day& x, const days& y) noexcept CONSTCD11 inline day -operator+(const days& x, const day& y) noexcept +operator+(const days& x, const day& y) NOEXCEPT { return y + x; } @@ -1060,7 +1064,7 @@ operator+(const days& x, const day& y) noexcept CONSTCD11 inline day -operator-(const day& x, const days& y) noexcept +operator-(const day& x, const days& y) NOEXCEPT { return x + -y; } @@ -1069,7 +1073,7 @@ inline std::ostream& operator<<(std::ostream& os, const day& d) { - save_stream _(os); + detail::save_stream _(os); os.fill('0'); os.flags(std::ios::dec | std::ios::right); os.width(2); @@ -1079,15 +1083,15 @@ operator<<(std::ostream& os, const day& d) // month -CONSTCD11 inline month::month(unsigned m) noexcept : m_(static_cast(m)) {} -inline month& month::operator++() noexcept {if (++m_ == 13) m_ = 1; return *this;} -inline month month::operator++(int) noexcept {auto tmp(*this); ++(*this); return tmp;} -inline month& month::operator--() noexcept {if (--m_ == 0) m_ = 12; return *this;} -inline month month::operator--(int) noexcept {auto tmp(*this); --(*this); return tmp;} +CONSTCD11 inline month::month(unsigned m) NOEXCEPT : m_(static_cast(m)) {} +inline month& month::operator++() NOEXCEPT {if (++m_ == 13) m_ = 1; return *this;} +inline month month::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} +inline month& month::operator--() NOEXCEPT {if (--m_ == 0) m_ = 12; return *this;} +inline month month::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} inline month& -month::operator+=(const months& m) noexcept +month::operator+=(const months& m) NOEXCEPT { *this = *this + m; return *this; @@ -1095,19 +1099,19 @@ month::operator+=(const months& m) noexcept inline month& -month::operator-=(const months& m) noexcept +month::operator-=(const months& m) NOEXCEPT { *this = *this - m; return *this; } -CONSTCD11 inline month::operator unsigned() const noexcept {return m_;} -CONSTCD11 inline bool month::ok() const noexcept {return 1 <= m_ && m_ <= 12;} +CONSTCD11 inline month::operator unsigned() const NOEXCEPT {return m_;} +CONSTCD11 inline bool month::ok() const NOEXCEPT {return 1 <= m_ && m_ <= 12;} CONSTCD11 inline bool -operator==(const month& x, const month& y) noexcept +operator==(const month& x, const month& y) NOEXCEPT { return static_cast(x) == static_cast(y); } @@ -1115,7 +1119,7 @@ operator==(const month& x, const month& y) noexcept CONSTCD11 inline bool -operator!=(const month& x, const month& y) noexcept +operator!=(const month& x, const month& y) NOEXCEPT { return !(x == y); } @@ -1123,7 +1127,7 @@ operator!=(const month& x, const month& y) noexcept CONSTCD11 inline bool -operator<(const month& x, const month& y) noexcept +operator<(const month& x, const month& y) NOEXCEPT { return static_cast(x) < static_cast(y); } @@ -1131,7 +1135,7 @@ operator<(const month& x, const month& y) noexcept CONSTCD11 inline bool -operator>(const month& x, const month& y) noexcept +operator>(const month& x, const month& y) NOEXCEPT { return y < x; } @@ -1139,7 +1143,7 @@ operator>(const month& x, const month& y) noexcept CONSTCD11 inline bool -operator<=(const month& x, const month& y) noexcept +operator<=(const month& x, const month& y) NOEXCEPT { return !(y < x); } @@ -1147,7 +1151,7 @@ operator<=(const month& x, const month& y) noexcept CONSTCD11 inline bool -operator>=(const month& x, const month& y) noexcept +operator>=(const month& x, const month& y) NOEXCEPT { return !(x < y); } @@ -1155,7 +1159,7 @@ operator>=(const month& x, const month& y) noexcept CONSTCD14 inline months -operator-(const month& x, const month& y) noexcept +operator-(const month& x, const month& y) NOEXCEPT { auto const d = static_cast(x) - static_cast(y); return months(d <= 11 ? d : d + 12); @@ -1164,7 +1168,7 @@ operator-(const month& x, const month& y) noexcept CONSTCD14 inline month -operator+(const month& x, const months& y) noexcept +operator+(const month& x, const months& y) NOEXCEPT { auto const mu = static_cast(static_cast(x)) - 1 + y.count(); auto const yr = (mu >= 0 ? mu : mu-11) / 12; @@ -1174,7 +1178,7 @@ operator+(const month& x, const months& y) noexcept CONSTCD14 inline month -operator+(const months& x, const month& y) noexcept +operator+(const months& x, const month& y) NOEXCEPT { return y + x; } @@ -1182,7 +1186,7 @@ operator+(const months& x, const month& y) noexcept CONSTCD14 inline month -operator-(const month& x, const months& y) noexcept +operator-(const month& x, const months& y) NOEXCEPT { return x + -y; } @@ -1238,29 +1242,29 @@ operator<<(std::ostream& os, const month& m) // year -CONSTCD11 inline year::year(int y) noexcept : y_(static_cast(y)) {} -inline year& year::operator++() noexcept {++y_; return *this;} -inline year year::operator++(int) noexcept {auto tmp(*this); ++(*this); return tmp;} -inline year& year::operator--() noexcept {--y_; return *this;} -inline year year::operator--(int) noexcept {auto tmp(*this); --(*this); return tmp;} -inline year& year::operator+=(const years& y) noexcept {*this = *this + y; return *this;} -inline year& year::operator-=(const years& y) noexcept {*this = *this - y; return *this;} +CONSTCD11 inline year::year(int y) NOEXCEPT : y_(static_cast(y)) {} +inline year& year::operator++() NOEXCEPT {++y_; return *this;} +inline year year::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} +inline year& year::operator--() NOEXCEPT {--y_; return *this;} +inline year year::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} +inline year& year::operator+=(const years& y) NOEXCEPT {*this = *this + y; return *this;} +inline year& year::operator-=(const years& y) NOEXCEPT {*this = *this - y; return *this;} CONSTCD11 inline bool -year::is_leap() const noexcept +year::is_leap() const NOEXCEPT { return y_ % 4 == 0 && (y_ % 100 != 0 || y_ % 400 == 0); } -CONSTCD11 inline year::operator int() const noexcept {return y_;} -CONSTCD11 inline bool year::ok() const noexcept {return min() <= *this && *this <= max();} +CONSTCD11 inline year::operator int() const NOEXCEPT {return y_;} +CONSTCD11 inline bool year::ok() const NOEXCEPT {return min() <= *this && *this <= max();} CONSTCD11 inline year -year::min() noexcept +year::min() NOEXCEPT { using namespace std::chrono; static_assert(sizeof(seconds)*CHAR_BIT >= 41, "seconds may overflow"); @@ -1273,7 +1277,7 @@ year::min() noexcept CONSTCD11 inline year -year::max() noexcept +year::max() NOEXCEPT { using namespace std::chrono; static_assert(sizeof(seconds)*CHAR_BIT >= 41, "seconds may overflow"); @@ -1286,7 +1290,7 @@ year::max() noexcept CONSTCD11 inline bool -operator==(const year& x, const year& y) noexcept +operator==(const year& x, const year& y) NOEXCEPT { return static_cast(x) == static_cast(y); } @@ -1294,7 +1298,7 @@ operator==(const year& x, const year& y) noexcept CONSTCD11 inline bool -operator!=(const year& x, const year& y) noexcept +operator!=(const year& x, const year& y) NOEXCEPT { return !(x == y); } @@ -1302,7 +1306,7 @@ operator!=(const year& x, const year& y) noexcept CONSTCD11 inline bool -operator<(const year& x, const year& y) noexcept +operator<(const year& x, const year& y) NOEXCEPT { return static_cast(x) < static_cast(y); } @@ -1310,7 +1314,7 @@ operator<(const year& x, const year& y) noexcept CONSTCD11 inline bool -operator>(const year& x, const year& y) noexcept +operator>(const year& x, const year& y) NOEXCEPT { return y < x; } @@ -1318,7 +1322,7 @@ operator>(const year& x, const year& y) noexcept CONSTCD11 inline bool -operator<=(const year& x, const year& y) noexcept +operator<=(const year& x, const year& y) NOEXCEPT { return !(y < x); } @@ -1326,7 +1330,7 @@ operator<=(const year& x, const year& y) noexcept CONSTCD11 inline bool -operator>=(const year& x, const year& y) noexcept +operator>=(const year& x, const year& y) NOEXCEPT { return !(x < y); } @@ -1334,7 +1338,7 @@ operator>=(const year& x, const year& y) noexcept CONSTCD11 inline years -operator-(const year& x, const year& y) noexcept +operator-(const year& x, const year& y) NOEXCEPT { return years{static_cast(x) - static_cast(y)}; } @@ -1342,7 +1346,7 @@ operator-(const year& x, const year& y) noexcept CONSTCD11 inline year -operator+(const year& x, const years& y) noexcept +operator+(const year& x, const years& y) NOEXCEPT { return year{static_cast(x) + y.count()}; } @@ -1350,7 +1354,7 @@ operator+(const year& x, const years& y) noexcept CONSTCD11 inline year -operator+(const years& x, const year& y) noexcept +operator+(const years& x, const year& y) NOEXCEPT { return y + x; } @@ -1358,7 +1362,7 @@ operator+(const years& x, const year& y) noexcept CONSTCD11 inline year -operator-(const year& x, const years& y) noexcept +operator-(const year& x, const years& y) NOEXCEPT { return year{static_cast(x) - y.count()}; } @@ -1367,7 +1371,7 @@ inline std::ostream& operator<<(std::ostream& os, const year& y) { - save_stream _(os); + detail::save_stream _(os); os.fill('0'); os.flags(std::ios::dec | std::ios::internal); os.width(4 + (y < year{0})); @@ -1380,7 +1384,7 @@ operator<<(std::ostream& os, const year& y) CONSTCD11 inline unsigned char -weekday::weekday_from_days(int z) noexcept +weekday::weekday_from_days(int z) NOEXCEPT { return static_cast(static_cast( z >= -4 ? (z+4) % 7 : (z+5) % 7 + 6)); @@ -1388,24 +1392,24 @@ weekday::weekday_from_days(int z) noexcept CONSTCD11 inline -weekday::weekday(unsigned wd) noexcept +weekday::weekday(unsigned wd) NOEXCEPT : wd_(static_cast(wd)) {} CONSTCD11 inline -weekday::weekday(const day_point& dp) noexcept +weekday::weekday(const day_point& dp) NOEXCEPT : wd_(weekday_from_days(dp.time_since_epoch().count())) {} -inline weekday& weekday::operator++() noexcept {if (++wd_ == 7) wd_ = 0; return *this;} -inline weekday weekday::operator++(int) noexcept {auto tmp(*this); ++(*this); return tmp;} -inline weekday& weekday::operator--() noexcept {if (wd_-- == 0) wd_ = 6; return *this;} -inline weekday weekday::operator--(int) noexcept {auto tmp(*this); --(*this); return tmp;} +inline weekday& weekday::operator++() NOEXCEPT {if (++wd_ == 7) wd_ = 0; return *this;} +inline weekday weekday::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} +inline weekday& weekday::operator--() NOEXCEPT {if (wd_-- == 0) wd_ = 6; return *this;} +inline weekday weekday::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} inline weekday& -weekday::operator+=(const days& d) noexcept +weekday::operator+=(const days& d) NOEXCEPT { *this = *this + d; return *this; @@ -1413,7 +1417,7 @@ weekday::operator+=(const days& d) noexcept inline weekday& -weekday::operator-=(const days& d) noexcept +weekday::operator-=(const days& d) NOEXCEPT { *this = *this - d; return *this; @@ -1421,17 +1425,17 @@ weekday::operator-=(const days& d) noexcept CONSTCD11 inline -weekday::operator unsigned() const noexcept +weekday::operator unsigned() const NOEXCEPT { return static_cast(wd_); } -CONSTCD11 inline bool weekday::ok() const noexcept {return wd_ <= 6;} +CONSTCD11 inline bool weekday::ok() const NOEXCEPT {return wd_ <= 6;} CONSTCD11 inline bool -operator==(const weekday& x, const weekday& y) noexcept +operator==(const weekday& x, const weekday& y) NOEXCEPT { return static_cast(x) == static_cast(y); } @@ -1439,7 +1443,7 @@ operator==(const weekday& x, const weekday& y) noexcept CONSTCD11 inline bool -operator!=(const weekday& x, const weekday& y) noexcept +operator!=(const weekday& x, const weekday& y) NOEXCEPT { return !(x == y); } @@ -1447,7 +1451,7 @@ operator!=(const weekday& x, const weekday& y) noexcept CONSTCD14 inline days -operator-(const weekday& x, const weekday& y) noexcept +operator-(const weekday& x, const weekday& y) NOEXCEPT { auto const diff = static_cast(x) - static_cast(y); return days{diff <= 6 ? diff : diff + 7}; @@ -1456,7 +1460,7 @@ operator-(const weekday& x, const weekday& y) noexcept CONSTCD14 inline weekday -operator+(const weekday& x, const days& y) noexcept +operator+(const weekday& x, const days& y) NOEXCEPT { auto const wdu = static_cast(static_cast(x)) + y.count(); auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7; @@ -1466,7 +1470,7 @@ operator+(const weekday& x, const days& y) noexcept CONSTCD14 inline weekday -operator+(const days& x, const weekday& y) noexcept +operator+(const days& x, const weekday& y) NOEXCEPT { return y + x; } @@ -1474,7 +1478,7 @@ operator+(const days& x, const weekday& y) noexcept CONSTCD14 inline weekday -operator-(const weekday& x, const days& y) noexcept +operator-(const weekday& x, const days& y) NOEXCEPT { return x + -y; } @@ -1513,15 +1517,14 @@ operator<<(std::ostream& os, const weekday& wd) return os; } +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) inline namespace literals { -CONSTDATA date::last_spec last{}; - CONSTCD11 inline date::day -operator "" _d(unsigned long long d) noexcept +operator "" _d(unsigned long long d) NOEXCEPT { return date::day{static_cast(d)}; } @@ -1529,10 +1532,13 @@ operator "" _d(unsigned long long d) noexcept CONSTCD11 inline date::year -operator "" _y(unsigned long long y) noexcept +operator "" _y(unsigned long long y) NOEXCEPT { return date::year(static_cast(y)); } +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) + +CONSTDATA date::last_spec last{}; CONSTDATA date::month jan{1}; CONSTDATA date::month feb{2}; @@ -1555,31 +1561,33 @@ CONSTDATA date::weekday thu{4u}; CONSTDATA date::weekday fri{5u}; CONSTDATA date::weekday sat{6u}; +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) } // inline namespace literals +#endif // weekday_indexed CONSTCD11 inline weekday -weekday_indexed::weekday() const noexcept +weekday_indexed::weekday() const NOEXCEPT { return date::weekday{static_cast(wd_)}; } -CONSTCD11 inline unsigned weekday_indexed::index() const noexcept {return index_;} +CONSTCD11 inline unsigned weekday_indexed::index() const NOEXCEPT {return index_;} CONSTCD11 inline bool -weekday_indexed::ok() const noexcept +weekday_indexed::ok() const NOEXCEPT { return weekday().ok() && 1 <= index_ && index_ <= 5; } CONSTCD11 inline -weekday_indexed::weekday_indexed(const date::weekday& wd, unsigned index) noexcept +weekday_indexed::weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT : wd_(static_cast(static_cast(wd))) , index_(static_cast(index)) {} @@ -1594,7 +1602,7 @@ operator<<(std::ostream& os, const weekday_indexed& wdi) CONSTCD11 inline weekday_indexed -weekday::operator[](unsigned index) const noexcept +weekday::operator[](unsigned index) const NOEXCEPT { return {*this, index}; } @@ -1602,7 +1610,7 @@ weekday::operator[](unsigned index) const noexcept CONSTCD11 inline bool -operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept +operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT { return x.weekday() == y.weekday() && x.index() == y.index(); } @@ -1610,21 +1618,21 @@ operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept CONSTCD11 inline bool -operator!=(const weekday_indexed& x, const weekday_indexed& y) noexcept +operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT { return !(x == y); } // weekday_last -CONSTCD11 inline date::weekday weekday_last::weekday() const noexcept {return wd_;} -CONSTCD11 inline bool weekday_last::ok() const noexcept {return wd_.ok();} -CONSTCD11 inline weekday_last::weekday_last(const date::weekday& wd) noexcept : wd_(wd) {} +CONSTCD11 inline date::weekday weekday_last::weekday() const NOEXCEPT {return wd_;} +CONSTCD11 inline bool weekday_last::ok() const NOEXCEPT {return wd_.ok();} +CONSTCD11 inline weekday_last::weekday_last(const date::weekday& wd) NOEXCEPT : wd_(wd) {} CONSTCD11 inline bool -operator==(const weekday_last& x, const weekday_last& y) noexcept +operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT { return x.weekday() == y.weekday(); } @@ -1632,7 +1640,7 @@ operator==(const weekday_last& x, const weekday_last& y) noexcept CONSTCD11 inline bool -operator!=(const weekday_last& x, const weekday_last& y) noexcept +operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT { return !(x == y); } @@ -1647,7 +1655,7 @@ operator<<(std::ostream& os, const weekday_last& wdl) CONSTCD11 inline weekday_last -weekday::operator[](last_spec) const noexcept +weekday::operator[](last_spec) const NOEXCEPT { return weekday_last{*this}; } @@ -1656,18 +1664,18 @@ weekday::operator[](last_spec) const noexcept CONSTCD11 inline -year_month::year_month(const date::year& y, const date::month& m) noexcept +year_month::year_month(const date::year& y, const date::month& m) NOEXCEPT : y_(y) , m_(m) {} -CONSTCD11 inline year year_month::year() const noexcept {return y_;} -CONSTCD11 inline month year_month::month() const noexcept {return m_;} -CONSTCD11 inline bool year_month::ok() const noexcept {return y_.ok() && m_.ok();} +CONSTCD11 inline year year_month::year() const NOEXCEPT {return y_;} +CONSTCD11 inline month year_month::month() const NOEXCEPT {return m_;} +CONSTCD11 inline bool year_month::ok() const NOEXCEPT {return y_.ok() && m_.ok();} inline year_month& -year_month::operator+=(const months& dm) noexcept +year_month::operator+=(const months& dm) NOEXCEPT { *this = *this + dm; return *this; @@ -1675,7 +1683,7 @@ year_month::operator+=(const months& dm) noexcept inline year_month& -year_month::operator-=(const months& dm) noexcept +year_month::operator-=(const months& dm) NOEXCEPT { *this = *this - dm; return *this; @@ -1683,7 +1691,7 @@ year_month::operator-=(const months& dm) noexcept inline year_month& -year_month::operator+=(const years& dy) noexcept +year_month::operator+=(const years& dy) NOEXCEPT { *this = *this + dy; return *this; @@ -1691,7 +1699,7 @@ year_month::operator+=(const years& dy) noexcept inline year_month& -year_month::operator-=(const years& dy) noexcept +year_month::operator-=(const years& dy) NOEXCEPT { *this = *this - dy; return *this; @@ -1700,7 +1708,7 @@ year_month::operator-=(const years& dy) noexcept CONSTCD11 inline bool -operator==(const year_month& x, const year_month& y) noexcept +operator==(const year_month& x, const year_month& y) NOEXCEPT { return x.year() == y.year() && x.month() == y.month(); } @@ -1708,7 +1716,7 @@ operator==(const year_month& x, const year_month& y) noexcept CONSTCD11 inline bool -operator!=(const year_month& x, const year_month& y) noexcept +operator!=(const year_month& x, const year_month& y) NOEXCEPT { return !(x == y); } @@ -1716,7 +1724,7 @@ operator!=(const year_month& x, const year_month& y) noexcept CONSTCD11 inline bool -operator<(const year_month& x, const year_month& y) noexcept +operator<(const year_month& x, const year_month& y) NOEXCEPT { return x.year() < y.year() ? true : (x.year() > y.year() ? false @@ -1726,7 +1734,7 @@ operator<(const year_month& x, const year_month& y) noexcept CONSTCD11 inline bool -operator>(const year_month& x, const year_month& y) noexcept +operator>(const year_month& x, const year_month& y) NOEXCEPT { return y < x; } @@ -1734,7 +1742,7 @@ operator>(const year_month& x, const year_month& y) noexcept CONSTCD11 inline bool -operator<=(const year_month& x, const year_month& y) noexcept +operator<=(const year_month& x, const year_month& y) NOEXCEPT { return !(y < x); } @@ -1742,7 +1750,7 @@ operator<=(const year_month& x, const year_month& y) noexcept CONSTCD11 inline bool -operator>=(const year_month& x, const year_month& y) noexcept +operator>=(const year_month& x, const year_month& y) NOEXCEPT { return !(x < y); } @@ -1750,7 +1758,7 @@ operator>=(const year_month& x, const year_month& y) noexcept CONSTCD14 inline year_month -operator+(const year_month& ym, const months& dm) noexcept +operator+(const year_month& ym, const months& dm) NOEXCEPT { auto dmi = static_cast(static_cast(ym.month())) - 1 + dm.count(); auto dy = (dmi >= 0 ? dmi : dmi-11) / 12; @@ -1761,7 +1769,7 @@ operator+(const year_month& ym, const months& dm) noexcept CONSTCD14 inline year_month -operator+(const months& dm, const year_month& ym) noexcept +operator+(const months& dm, const year_month& ym) NOEXCEPT { return ym + dm; } @@ -1769,7 +1777,7 @@ operator+(const months& dm, const year_month& ym) noexcept CONSTCD14 inline year_month -operator-(const year_month& ym, const months& dm) noexcept +operator-(const year_month& ym, const months& dm) NOEXCEPT { return ym + -dm; } @@ -1777,7 +1785,7 @@ operator-(const year_month& ym, const months& dm) noexcept CONSTCD11 inline months -operator-(const year_month& x, const year_month& y) noexcept +operator-(const year_month& x, const year_month& y) NOEXCEPT { return (x.year() - y.year()) + months(static_cast(x.month()) - static_cast(y.month())); @@ -1786,7 +1794,7 @@ operator-(const year_month& x, const year_month& y) noexcept CONSTCD11 inline year_month -operator+(const year_month& ym, const years& dy) noexcept +operator+(const year_month& ym, const years& dy) NOEXCEPT { return (ym.year() + dy) / ym.month(); } @@ -1794,7 +1802,7 @@ operator+(const year_month& ym, const years& dy) noexcept CONSTCD11 inline year_month -operator+(const years& dy, const year_month& ym) noexcept +operator+(const years& dy, const year_month& ym) NOEXCEPT { return ym + dy; } @@ -1802,7 +1810,7 @@ operator+(const years& dy, const year_month& ym) noexcept CONSTCD11 inline year_month -operator-(const year_month& ym, const years& dy) noexcept +operator-(const year_month& ym, const years& dy) NOEXCEPT { return ym + -dy; } @@ -1818,28 +1826,33 @@ operator<<(std::ostream& os, const year_month& ym) CONSTCD11 inline -month_day::month_day(const date::month& m, const date::day& d) noexcept +month_day::month_day(const date::month& m, const date::day& d) NOEXCEPT : m_(m) , d_(d) {} -CONSTCD11 inline date::month month_day::month() const noexcept {return m_;} -CONSTCD11 inline date::day month_day::day() const noexcept {return d_;} +CONSTCD11 inline date::month month_day::month() const NOEXCEPT {return m_;} +CONSTCD11 inline date::day month_day::day() const NOEXCEPT {return d_;} CONSTCD14 inline bool -month_day::ok() const noexcept +month_day::ok() const NOEXCEPT { CONSTDATA date::day d[] = - {31_d, 29_d, 31_d, 30_d, 31_d, 30_d, 31_d, 31_d, 30_d, 31_d, 30_d, 31_d}; - return m_.ok() && 1_d <= d_ && d_ <= d[static_cast(m_)-1]; + { + date::day(31), date::day(29), date::day(31), + date::day(30), date::day(31), date::day(30), + date::day(31), date::day(31), date::day(30), + date::day(31), date::day(30), date::day(31) + }; + return m_.ok() && date::day{1} <= d_ && d_ <= d[static_cast(m_)-1]; } CONSTCD11 inline bool -operator==(const month_day& x, const month_day& y) noexcept +operator==(const month_day& x, const month_day& y) NOEXCEPT { return x.month() == y.month() && x.day() == y.day(); } @@ -1847,7 +1860,7 @@ operator==(const month_day& x, const month_day& y) noexcept CONSTCD11 inline bool -operator!=(const month_day& x, const month_day& y) noexcept +operator!=(const month_day& x, const month_day& y) NOEXCEPT { return !(x == y); } @@ -1855,7 +1868,7 @@ operator!=(const month_day& x, const month_day& y) noexcept CONSTCD11 inline bool -operator<(const month_day& x, const month_day& y) noexcept +operator<(const month_day& x, const month_day& y) NOEXCEPT { return x.month() < y.month() ? true : (x.month() > y.month() ? false @@ -1865,7 +1878,7 @@ operator<(const month_day& x, const month_day& y) noexcept CONSTCD11 inline bool -operator>(const month_day& x, const month_day& y) noexcept +operator>(const month_day& x, const month_day& y) NOEXCEPT { return y < x; } @@ -1873,7 +1886,7 @@ operator>(const month_day& x, const month_day& y) noexcept CONSTCD11 inline bool -operator<=(const month_day& x, const month_day& y) noexcept +operator<=(const month_day& x, const month_day& y) NOEXCEPT { return !(y < x); } @@ -1881,7 +1894,7 @@ operator<=(const month_day& x, const month_day& y) noexcept CONSTCD11 inline bool -operator>=(const month_day& x, const month_day& y) noexcept +operator>=(const month_day& x, const month_day& y) NOEXCEPT { return !(x < y); } @@ -1895,14 +1908,14 @@ operator<<(std::ostream& os, const month_day& md) // month_day_last -CONSTCD11 inline month month_day_last::month() const noexcept {return m_;} -CONSTCD11 inline bool month_day_last::ok() const noexcept {return m_.ok();} -CONSTCD11 inline month_day_last::month_day_last(const date::month& m) noexcept : m_(m) {} +CONSTCD11 inline month month_day_last::month() const NOEXCEPT {return m_;} +CONSTCD11 inline bool month_day_last::ok() const NOEXCEPT {return m_.ok();} +CONSTCD11 inline month_day_last::month_day_last(const date::month& m) NOEXCEPT : m_(m) {} CONSTCD11 inline bool -operator==(const month_day_last& x, const month_day_last& y) noexcept +operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT { return x.month() == y.month(); } @@ -1910,7 +1923,7 @@ operator==(const month_day_last& x, const month_day_last& y) noexcept CONSTCD11 inline bool -operator!=(const month_day_last& x, const month_day_last& y) noexcept +operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT { return !(x == y); } @@ -1918,7 +1931,7 @@ operator!=(const month_day_last& x, const month_day_last& y) noexcept CONSTCD11 inline bool -operator<(const month_day_last& x, const month_day_last& y) noexcept +operator<(const month_day_last& x, const month_day_last& y) NOEXCEPT { return x.month() < y.month(); } @@ -1926,7 +1939,7 @@ operator<(const month_day_last& x, const month_day_last& y) noexcept CONSTCD11 inline bool -operator>(const month_day_last& x, const month_day_last& y) noexcept +operator>(const month_day_last& x, const month_day_last& y) NOEXCEPT { return y < x; } @@ -1934,7 +1947,7 @@ operator>(const month_day_last& x, const month_day_last& y) noexcept CONSTCD11 inline bool -operator<=(const month_day_last& x, const month_day_last& y) noexcept +operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT { return !(y < x); } @@ -1942,7 +1955,7 @@ operator<=(const month_day_last& x, const month_day_last& y) noexcept CONSTCD11 inline bool -operator>=(const month_day_last& x, const month_day_last& y) noexcept +operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT { return !(x < y); } @@ -1959,17 +1972,17 @@ operator<<(std::ostream& os, const month_day_last& mdl) CONSTCD11 inline month_weekday::month_weekday(const date::month& m, - const date::weekday_indexed& wdi) noexcept + const date::weekday_indexed& wdi) NOEXCEPT : m_(m) , wdi_(wdi) {} -CONSTCD11 inline month month_weekday::month() const noexcept {return m_;} +CONSTCD11 inline month month_weekday::month() const NOEXCEPT {return m_;} CONSTCD11 inline weekday_indexed -month_weekday::weekday_indexed() const noexcept +month_weekday::weekday_indexed() const NOEXCEPT { return wdi_; } @@ -1977,7 +1990,7 @@ month_weekday::weekday_indexed() const noexcept CONSTCD11 inline bool -month_weekday::ok() const noexcept +month_weekday::ok() const NOEXCEPT { return m_.ok() && wdi_.ok(); } @@ -1985,7 +1998,7 @@ month_weekday::ok() const noexcept CONSTCD11 inline bool -operator==(const month_weekday& x, const month_weekday& y) noexcept +operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT { return x.month() == y.month() && x.weekday_indexed() == y.weekday_indexed(); } @@ -1993,7 +2006,7 @@ operator==(const month_weekday& x, const month_weekday& y) noexcept CONSTCD11 inline bool -operator!=(const month_weekday& x, const month_weekday& y) noexcept +operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT { return !(x == y); } @@ -2010,17 +2023,17 @@ operator<<(std::ostream& os, const month_weekday& mwd) CONSTCD11 inline month_weekday_last::month_weekday_last(const date::month& m, - const date::weekday_last& wdl) noexcept + const date::weekday_last& wdl) NOEXCEPT : m_(m) , wdl_(wdl) {} -CONSTCD11 inline month month_weekday_last::month() const noexcept {return m_;} +CONSTCD11 inline month month_weekday_last::month() const NOEXCEPT {return m_;} CONSTCD11 inline weekday_last -month_weekday_last::weekday_last() const noexcept +month_weekday_last::weekday_last() const NOEXCEPT { return wdl_; } @@ -2028,7 +2041,7 @@ month_weekday_last::weekday_last() const noexcept CONSTCD11 inline bool -month_weekday_last::ok() const noexcept +month_weekday_last::ok() const NOEXCEPT { return m_.ok() && wdl_.ok(); } @@ -2036,7 +2049,7 @@ month_weekday_last::ok() const noexcept CONSTCD11 inline bool -operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept +operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT { return x.month() == y.month() && x.weekday_last() == y.weekday_last(); } @@ -2044,7 +2057,7 @@ operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept CONSTCD11 inline bool -operator!=(const month_weekday_last& x, const month_weekday_last& y) noexcept +operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT { return !(x == y); } @@ -2061,14 +2074,14 @@ operator<<(std::ostream& os, const month_weekday_last& mwdl) CONSTCD11 inline year_month_day_last::year_month_day_last(const date::year& y, - const date::month_day_last& mdl) noexcept + const date::month_day_last& mdl) NOEXCEPT : y_(y) , mdl_(mdl) {} inline year_month_day_last& -year_month_day_last::operator+=(const months& m) noexcept +year_month_day_last::operator+=(const months& m) NOEXCEPT { *this = *this + m; return *this; @@ -2076,7 +2089,7 @@ year_month_day_last::operator+=(const months& m) noexcept inline year_month_day_last& -year_month_day_last::operator-=(const months& m) noexcept +year_month_day_last::operator-=(const months& m) NOEXCEPT { *this = *this - m; return *this; @@ -2084,7 +2097,7 @@ year_month_day_last::operator-=(const months& m) noexcept inline year_month_day_last& -year_month_day_last::operator+=(const years& y) noexcept +year_month_day_last::operator+=(const years& y) NOEXCEPT { *this = *this + y; return *this; @@ -2092,19 +2105,19 @@ year_month_day_last::operator+=(const years& y) noexcept inline year_month_day_last& -year_month_day_last::operator-=(const years& y) noexcept +year_month_day_last::operator-=(const years& y) NOEXCEPT { *this = *this - y; return *this; } -CONSTCD11 inline year year_month_day_last::year() const noexcept {return y_;} -CONSTCD11 inline month year_month_day_last::month() const noexcept {return mdl_.month();} +CONSTCD11 inline year year_month_day_last::year() const NOEXCEPT {return y_;} +CONSTCD11 inline month year_month_day_last::month() const NOEXCEPT {return mdl_.month();} CONSTCD11 inline month_day_last -year_month_day_last::month_day_last() const noexcept +year_month_day_last::month_day_last() const NOEXCEPT { return mdl_; } @@ -2112,17 +2125,23 @@ year_month_day_last::month_day_last() const noexcept CONSTCD14 inline day -year_month_day_last::day() const noexcept +year_month_day_last::day() const NOEXCEPT { CONSTDATA date::day d[] = - {31_d, 28_d, 31_d, 30_d, 31_d, 30_d, 31_d, 31_d, 30_d, 31_d, 30_d, 31_d}; - return month() != feb || !y_.is_leap() ? d[static_cast(month())-1] : 29_d; + { + date::day(31), date::day(28), date::day(31), + date::day(30), date::day(31), date::day(30), + date::day(31), date::day(31), date::day(30), + date::day(31), date::day(30), date::day(31) + }; + return month() != feb || !y_.is_leap() ? + d[static_cast(month()) - 1] : date::day{29}; } CONSTCD11 inline bool -year_month_day_last::ok() const noexcept +year_month_day_last::ok() const NOEXCEPT { return y_.ok() && mdl_.ok(); } @@ -2130,7 +2149,7 @@ year_month_day_last::ok() const noexcept CONSTCD11 inline bool -operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return x.year() == y.year() && x.month_day_last() == y.month_day_last(); } @@ -2138,7 +2157,7 @@ operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept CONSTCD11 inline bool -operator!=(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return !(x == y); } @@ -2146,7 +2165,7 @@ operator!=(const year_month_day_last& x, const year_month_day_last& y) noexcept CONSTCD11 inline bool -operator<(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator<(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return x.year() < y.year() ? true : (x.year() > y.year() ? false @@ -2156,7 +2175,7 @@ operator<(const year_month_day_last& x, const year_month_day_last& y) noexcept CONSTCD11 inline bool -operator>(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator>(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return y < x; } @@ -2164,7 +2183,7 @@ operator>(const year_month_day_last& x, const year_month_day_last& y) noexcept CONSTCD11 inline bool -operator<=(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return !(y < x); } @@ -2172,7 +2191,7 @@ operator<=(const year_month_day_last& x, const year_month_day_last& y) noexcept CONSTCD11 inline bool -operator>=(const year_month_day_last& x, const year_month_day_last& y) noexcept +operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT { return !(x < y); } @@ -2187,7 +2206,7 @@ operator<<(std::ostream& os, const year_month_day_last& ymdl) CONSTCD14 inline year_month_day_last -operator+(const year_month_day_last& ymdl, const months& dm) noexcept +operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT { return (ymdl.year() / ymdl.month() + dm) / last; } @@ -2195,7 +2214,7 @@ operator+(const year_month_day_last& ymdl, const months& dm) noexcept CONSTCD14 inline year_month_day_last -operator+(const months& dm, const year_month_day_last& ymdl) noexcept +operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT { return ymdl + dm; } @@ -2203,7 +2222,7 @@ operator+(const months& dm, const year_month_day_last& ymdl) noexcept CONSTCD14 inline year_month_day_last -operator-(const year_month_day_last& ymdl, const months& dm) noexcept +operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT { return ymdl + (-dm); } @@ -2211,7 +2230,7 @@ operator-(const year_month_day_last& ymdl, const months& dm) noexcept CONSTCD11 inline year_month_day_last -operator+(const year_month_day_last& ymdl, const years& dy) noexcept +operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT { return {ymdl.year()+dy, ymdl.month_day_last()}; } @@ -2219,7 +2238,7 @@ operator+(const year_month_day_last& ymdl, const years& dy) noexcept CONSTCD11 inline year_month_day_last -operator+(const years& dy, const year_month_day_last& ymdl) noexcept +operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT { return ymdl + dy; } @@ -2227,7 +2246,7 @@ operator+(const years& dy, const year_month_day_last& ymdl) noexcept CONSTCD11 inline year_month_day_last -operator-(const year_month_day_last& ymdl, const years& dy) noexcept +operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT { return ymdl + (-dy); } @@ -2237,7 +2256,7 @@ operator-(const year_month_day_last& ymdl, const years& dy) noexcept CONSTCD11 inline year_month_day::year_month_day(const date::year& y, const date::month& m, - const date::day& d) noexcept + const date::day& d) NOEXCEPT : y_(y) , m_(m) , d_(d) @@ -2245,7 +2264,7 @@ year_month_day::year_month_day(const date::year& y, const date::month& m, CONSTCD14 inline -year_month_day::year_month_day(const year_month_day_last& ymdl) noexcept +year_month_day::year_month_day(const year_month_day_last& ymdl) NOEXCEPT : y_(ymdl.year()) , m_(ymdl.month()) , d_(ymdl.day()) @@ -2253,17 +2272,17 @@ year_month_day::year_month_day(const year_month_day_last& ymdl) noexcept CONSTCD14 inline -year_month_day::year_month_day(const day_point& dp) noexcept +year_month_day::year_month_day(const day_point& dp) NOEXCEPT : year_month_day(from_day_point(dp)) {} -CONSTCD11 inline year year_month_day::year() const noexcept {return y_;} -CONSTCD11 inline month year_month_day::month() const noexcept {return m_;} -CONSTCD11 inline day year_month_day::day() const noexcept {return d_;} +CONSTCD11 inline year year_month_day::year() const NOEXCEPT {return y_;} +CONSTCD11 inline month year_month_day::month() const NOEXCEPT {return m_;} +CONSTCD11 inline day year_month_day::day() const NOEXCEPT {return d_;} inline year_month_day& -year_month_day::operator+=(const months& m) noexcept +year_month_day::operator+=(const months& m) NOEXCEPT { *this = *this + m; return *this; @@ -2271,7 +2290,7 @@ year_month_day::operator+=(const months& m) noexcept inline year_month_day& -year_month_day::operator-=(const months& m) noexcept +year_month_day::operator-=(const months& m) NOEXCEPT { *this = *this - m; return *this; @@ -2279,7 +2298,7 @@ year_month_day::operator-=(const months& m) noexcept inline year_month_day& -year_month_day::operator+=(const years& y) noexcept +year_month_day::operator+=(const years& y) NOEXCEPT { *this = *this + y; return *this; @@ -2287,7 +2306,7 @@ year_month_day::operator+=(const years& y) noexcept inline year_month_day& -year_month_day::operator-=(const years& y) noexcept +year_month_day::operator-=(const years& y) NOEXCEPT { *this = *this - y; return *this; @@ -2295,7 +2314,7 @@ year_month_day::operator-=(const years& y) noexcept CONSTCD14 inline -year_month_day::operator day_point() const noexcept +year_month_day::operator day_point() const NOEXCEPT { static_assert(std::numeric_limits::digits >= 18, "This algorithm has not been ported to a 16 bit unsigned integer"); @@ -2320,7 +2339,7 @@ year_month_day::operator day_point() const noexcept CONSTCD14 inline -year_month_day_last::operator day_point() const noexcept +year_month_day_last::operator day_point() const NOEXCEPT { return day_point(year()/month()/day()); } @@ -2328,17 +2347,17 @@ year_month_day_last::operator day_point() const noexcept CONSTCD14 inline bool -year_month_day::ok() const noexcept +year_month_day::ok() const NOEXCEPT { if (!(y_.ok() && m_.ok())) return false; - return 1_d <= d_ && d_ <= (y_/m_/last).day(); + return date::day{1} <= d_ && d_ <= (y_ / m_ / last).day(); } CONSTCD11 inline bool -operator==(const year_month_day& x, const year_month_day& y) noexcept +operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT { return x.year() == y.year() && x.month() == y.month() && x.day() == y.day(); } @@ -2346,7 +2365,7 @@ operator==(const year_month_day& x, const year_month_day& y) noexcept CONSTCD11 inline bool -operator!=(const year_month_day& x, const year_month_day& y) noexcept +operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT { return !(x == y); } @@ -2354,7 +2373,7 @@ operator!=(const year_month_day& x, const year_month_day& y) noexcept CONSTCD11 inline bool -operator<(const year_month_day& x, const year_month_day& y) noexcept +operator<(const year_month_day& x, const year_month_day& y) NOEXCEPT { return x.year() < y.year() ? true : (x.year() > y.year() ? false @@ -2366,7 +2385,7 @@ operator<(const year_month_day& x, const year_month_day& y) noexcept CONSTCD11 inline bool -operator>(const year_month_day& x, const year_month_day& y) noexcept +operator>(const year_month_day& x, const year_month_day& y) NOEXCEPT { return y < x; } @@ -2374,7 +2393,7 @@ operator>(const year_month_day& x, const year_month_day& y) noexcept CONSTCD11 inline bool -operator<=(const year_month_day& x, const year_month_day& y) noexcept +operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT { return !(y < x); } @@ -2382,7 +2401,7 @@ operator<=(const year_month_day& x, const year_month_day& y) noexcept CONSTCD11 inline bool -operator>=(const year_month_day& x, const year_month_day& y) noexcept +operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT { return !(x < y); } @@ -2391,7 +2410,7 @@ inline std::ostream& operator<<(std::ostream& os, const year_month_day& ymd) { - save_stream _(os); + detail::save_stream _(os); os.fill('0'); os.flags(std::ios::dec | std::ios::right); os << ymd.year() << '-'; @@ -2404,7 +2423,7 @@ operator<<(std::ostream& os, const year_month_day& ymd) CONSTCD14 inline year_month_day -year_month_day::from_day_point(const day_point& dp) noexcept +year_month_day::from_day_point(const day_point& dp) NOEXCEPT { static_assert(std::numeric_limits::digits >= 18, "This algorithm has not been ported to a 16 bit unsigned integer"); @@ -2432,7 +2451,7 @@ year_month_day::from_day_point(const day_point& dp) noexcept CONSTCD14 inline year_month_day -operator+(const year_month_day& ymd, const months& dm) noexcept +operator+(const year_month_day& ymd, const months& dm) NOEXCEPT { return (ymd.year() / ymd.month() + dm) / ymd.day(); } @@ -2440,7 +2459,7 @@ operator+(const year_month_day& ymd, const months& dm) noexcept CONSTCD14 inline year_month_day -operator+(const months& dm, const year_month_day& ymd) noexcept +operator+(const months& dm, const year_month_day& ymd) NOEXCEPT { return ymd + dm; } @@ -2448,7 +2467,7 @@ operator+(const months& dm, const year_month_day& ymd) noexcept CONSTCD14 inline year_month_day -operator-(const year_month_day& ymd, const months& dm) noexcept +operator-(const year_month_day& ymd, const months& dm) NOEXCEPT { return ymd + (-dm); } @@ -2456,7 +2475,7 @@ operator-(const year_month_day& ymd, const months& dm) noexcept CONSTCD11 inline year_month_day -operator+(const year_month_day& ymd, const years& dy) noexcept +operator+(const year_month_day& ymd, const years& dy) NOEXCEPT { return (ymd.year() + dy) / ymd.month() / ymd.day(); } @@ -2464,7 +2483,7 @@ operator+(const year_month_day& ymd, const years& dy) noexcept CONSTCD11 inline year_month_day -operator+(const years& dy, const year_month_day& ymd) noexcept +operator+(const years& dy, const year_month_day& ymd) NOEXCEPT { return ymd + dy; } @@ -2472,7 +2491,7 @@ operator+(const years& dy, const year_month_day& ymd) noexcept CONSTCD11 inline year_month_day -operator-(const year_month_day& ymd, const years& dy) noexcept +operator-(const year_month_day& ymd, const years& dy) NOEXCEPT { return ymd + (-dy); } @@ -2483,7 +2502,7 @@ CONSTCD11 inline year_month_weekday::year_month_weekday(const date::year& y, const date::month& m, const date::weekday_indexed& wdi) - noexcept + NOEXCEPT : y_(y) , m_(m) , wdi_(wdi) @@ -2491,13 +2510,13 @@ year_month_weekday::year_month_weekday(const date::year& y, const date::month& m CONSTCD14 inline -year_month_weekday::year_month_weekday(const day_point& dp) noexcept +year_month_weekday::year_month_weekday(const day_point& dp) NOEXCEPT : year_month_weekday(from_day_point(dp)) {} inline year_month_weekday& -year_month_weekday::operator+=(const months& m) noexcept +year_month_weekday::operator+=(const months& m) NOEXCEPT { *this = *this + m; return *this; @@ -2505,7 +2524,7 @@ year_month_weekday::operator+=(const months& m) noexcept inline year_month_weekday& -year_month_weekday::operator-=(const months& m) noexcept +year_month_weekday::operator-=(const months& m) NOEXCEPT { *this = *this - m; return *this; @@ -2513,7 +2532,7 @@ year_month_weekday::operator-=(const months& m) noexcept inline year_month_weekday& -year_month_weekday::operator+=(const years& y) noexcept +year_month_weekday::operator+=(const years& y) NOEXCEPT { *this = *this + y; return *this; @@ -2521,19 +2540,19 @@ year_month_weekday::operator+=(const years& y) noexcept inline year_month_weekday& -year_month_weekday::operator-=(const years& y) noexcept +year_month_weekday::operator-=(const years& y) NOEXCEPT { *this = *this - y; return *this; } -CONSTCD11 inline year year_month_weekday::year() const noexcept {return y_;} -CONSTCD11 inline month year_month_weekday::month() const noexcept {return m_;} +CONSTCD11 inline year year_month_weekday::year() const NOEXCEPT {return y_;} +CONSTCD11 inline month year_month_weekday::month() const NOEXCEPT {return m_;} CONSTCD11 inline weekday -year_month_weekday::weekday() const noexcept +year_month_weekday::weekday() const NOEXCEPT { return wdi_.weekday(); } @@ -2541,7 +2560,7 @@ year_month_weekday::weekday() const noexcept CONSTCD11 inline unsigned -year_month_weekday::index() const noexcept +year_month_weekday::index() const NOEXCEPT { return wdi_.index(); } @@ -2549,14 +2568,14 @@ year_month_weekday::index() const noexcept CONSTCD11 inline weekday_indexed -year_month_weekday::weekday_indexed() const noexcept +year_month_weekday::weekday_indexed() const NOEXCEPT { return wdi_; } CONSTCD14 inline -year_month_weekday::operator day_point() const noexcept +year_month_weekday::operator day_point() const NOEXCEPT { auto d = day_point(y_/m_/1); return d + (wdi_.weekday() - date::weekday(d) + days{(wdi_.index()-1)*7}); @@ -2565,7 +2584,7 @@ year_month_weekday::operator day_point() const noexcept CONSTCD14 inline bool -year_month_weekday::ok() const noexcept +year_month_weekday::ok() const NOEXCEPT { if (!y_.ok() || !m_.ok() || !wdi_.weekday().ok() || wdi_.index() < 1) return false; @@ -2578,7 +2597,7 @@ year_month_weekday::ok() const noexcept CONSTCD14 inline year_month_weekday -year_month_weekday::from_day_point(const day_point& dp) noexcept +year_month_weekday::from_day_point(const day_point& dp) NOEXCEPT { auto const wd = date::weekday(dp); auto const ymd = year_month_day(dp); @@ -2588,7 +2607,7 @@ year_month_weekday::from_day_point(const day_point& dp) noexcept CONSTCD11 inline bool -operator==(const year_month_weekday& x, const year_month_weekday& y) noexcept +operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT { return x.year() == y.year() && x.month() == y.month() && x.weekday_indexed() == y.weekday_indexed(); @@ -2597,7 +2616,7 @@ operator==(const year_month_weekday& x, const year_month_weekday& y) noexcept CONSTCD11 inline bool -operator!=(const year_month_weekday& x, const year_month_weekday& y) noexcept +operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT { return !(x == y); } @@ -2613,7 +2632,7 @@ operator<<(std::ostream& os, const year_month_weekday& ymwdi) CONSTCD14 inline year_month_weekday -operator+(const year_month_weekday& ymwd, const months& dm) noexcept +operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT { return (ymwd.year() / ymwd.month() + dm) / ymwd.weekday_indexed(); } @@ -2621,7 +2640,7 @@ operator+(const year_month_weekday& ymwd, const months& dm) noexcept CONSTCD14 inline year_month_weekday -operator+(const months& dm, const year_month_weekday& ymwd) noexcept +operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT { return ymwd + dm; } @@ -2629,7 +2648,7 @@ operator+(const months& dm, const year_month_weekday& ymwd) noexcept CONSTCD14 inline year_month_weekday -operator-(const year_month_weekday& ymwd, const months& dm) noexcept +operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT { return ymwd + (-dm); } @@ -2637,7 +2656,7 @@ operator-(const year_month_weekday& ymwd, const months& dm) noexcept CONSTCD11 inline year_month_weekday -operator+(const year_month_weekday& ymwd, const years& dy) noexcept +operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT { return {ymwd.year()+dy, ymwd.month(), ymwd.weekday_indexed()}; } @@ -2645,7 +2664,7 @@ operator+(const year_month_weekday& ymwd, const years& dy) noexcept CONSTCD11 inline year_month_weekday -operator+(const years& dy, const year_month_weekday& ymwd) noexcept +operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT { return ymwd + dy; } @@ -2653,7 +2672,7 @@ operator+(const years& dy, const year_month_weekday& ymwd) noexcept CONSTCD11 inline year_month_weekday -operator-(const year_month_weekday& ymwd, const years& dy) noexcept +operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT { return ymwd + (-dy); } @@ -2664,7 +2683,7 @@ CONSTCD11 inline year_month_weekday_last::year_month_weekday_last(const date::year& y, const date::month& m, - const date::weekday_last& wdl) noexcept + const date::weekday_last& wdl) NOEXCEPT : y_(y) , m_(m) , wdl_(wdl) @@ -2672,7 +2691,7 @@ year_month_weekday_last::year_month_weekday_last(const date::year& y, inline year_month_weekday_last& -year_month_weekday_last::operator+=(const months& m) noexcept +year_month_weekday_last::operator+=(const months& m) NOEXCEPT { *this = *this + m; return *this; @@ -2680,7 +2699,7 @@ year_month_weekday_last::operator+=(const months& m) noexcept inline year_month_weekday_last& -year_month_weekday_last::operator-=(const months& m) noexcept +year_month_weekday_last::operator-=(const months& m) NOEXCEPT { *this = *this - m; return *this; @@ -2688,7 +2707,7 @@ year_month_weekday_last::operator-=(const months& m) noexcept inline year_month_weekday_last& -year_month_weekday_last::operator+=(const years& y) noexcept +year_month_weekday_last::operator+=(const years& y) NOEXCEPT { *this = *this + y; return *this; @@ -2696,19 +2715,19 @@ year_month_weekday_last::operator+=(const years& y) noexcept inline year_month_weekday_last& -year_month_weekday_last::operator-=(const years& y) noexcept +year_month_weekday_last::operator-=(const years& y) NOEXCEPT { *this = *this - y; return *this; } -CONSTCD11 inline year year_month_weekday_last::year() const noexcept {return y_;} -CONSTCD11 inline month year_month_weekday_last::month() const noexcept {return m_;} +CONSTCD11 inline year year_month_weekday_last::year() const NOEXCEPT {return y_;} +CONSTCD11 inline month year_month_weekday_last::month() const NOEXCEPT {return m_;} CONSTCD11 inline weekday -year_month_weekday_last::weekday() const noexcept +year_month_weekday_last::weekday() const NOEXCEPT { return wdl_.weekday(); } @@ -2716,14 +2735,14 @@ year_month_weekday_last::weekday() const noexcept CONSTCD11 inline weekday_last -year_month_weekday_last::weekday_last() const noexcept +year_month_weekday_last::weekday_last() const NOEXCEPT { return wdl_; } CONSTCD14 inline -year_month_weekday_last::operator day_point() const noexcept +year_month_weekday_last::operator day_point() const NOEXCEPT { auto const d = day_point(y_/m_/last); return d - (date::weekday{d} - wdl_.weekday()); @@ -2732,7 +2751,7 @@ year_month_weekday_last::operator day_point() const noexcept CONSTCD11 inline bool -year_month_weekday_last::ok() const noexcept +year_month_weekday_last::ok() const NOEXCEPT { return y_.ok() && m_.ok() && wdl_.ok(); } @@ -2740,7 +2759,7 @@ year_month_weekday_last::ok() const noexcept CONSTCD11 inline bool -operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) noexcept +operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT { return x.year() == y.year() && x.month() == y.month() && x.weekday_last() == y.weekday_last(); @@ -2749,7 +2768,7 @@ operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) n CONSTCD11 inline bool -operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) noexcept +operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT { return !(x == y); } @@ -2764,7 +2783,7 @@ operator<<(std::ostream& os, const year_month_weekday_last& ymwdl) CONSTCD14 inline year_month_weekday_last -operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept +operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT { return (ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last(); } @@ -2772,7 +2791,7 @@ operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept CONSTCD14 inline year_month_weekday_last -operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept +operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT { return ymwdl + dm; } @@ -2780,7 +2799,7 @@ operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept CONSTCD14 inline year_month_weekday_last -operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept +operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT { return ymwdl + (-dm); } @@ -2788,7 +2807,7 @@ operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept CONSTCD11 inline year_month_weekday_last -operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept +operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT { return {ymwdl.year()+dy, ymwdl.month(), ymwdl.weekday_last()}; } @@ -2796,7 +2815,7 @@ operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept CONSTCD11 inline year_month_weekday_last -operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept +operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT { return ymwdl + dy; } @@ -2804,7 +2823,7 @@ operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept CONSTCD11 inline year_month_weekday_last -operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept +operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT { return ymwdl + (-dy); } @@ -2814,7 +2833,7 @@ operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept CONSTCD11 inline year_month -operator/(const year& y, const month& m) noexcept +operator/(const year& y, const month& m) NOEXCEPT { return {y, m}; } @@ -2822,7 +2841,7 @@ operator/(const year& y, const month& m) noexcept CONSTCD11 inline year_month -operator/(const year& y, int m) noexcept +operator/(const year& y, int m) NOEXCEPT { return y / month(static_cast(m)); } @@ -2832,7 +2851,7 @@ operator/(const year& y, int m) noexcept CONSTCD11 inline month_day -operator/(const month& m, const day& d) noexcept +operator/(const month& m, const day& d) NOEXCEPT { return {m, d}; } @@ -2840,7 +2859,7 @@ operator/(const month& m, const day& d) noexcept CONSTCD11 inline month_day -operator/(const day& d, const month& m) noexcept +operator/(const day& d, const month& m) NOEXCEPT { return m / d; } @@ -2848,7 +2867,7 @@ operator/(const day& d, const month& m) noexcept CONSTCD11 inline month_day -operator/(const month& m, int d) noexcept +operator/(const month& m, int d) NOEXCEPT { return m / day(static_cast(d)); } @@ -2856,19 +2875,19 @@ operator/(const month& m, int d) noexcept CONSTCD11 inline month_day -operator/(int m, const day& d) noexcept +operator/(int m, const day& d) NOEXCEPT { return month(static_cast(m)) / d; } -CONSTCD11 inline month_day operator/(const day& d, int m) noexcept {return m / d;} +CONSTCD11 inline month_day operator/(const day& d, int m) NOEXCEPT {return m / d;} // month_day_last from operator/() CONSTCD11 inline month_day_last -operator/(const month& m, last_spec) noexcept +operator/(const month& m, last_spec) NOEXCEPT { return month_day_last{m}; } @@ -2876,7 +2895,7 @@ operator/(const month& m, last_spec) noexcept CONSTCD11 inline month_day_last -operator/(last_spec, const month& m) noexcept +operator/(last_spec, const month& m) NOEXCEPT { return m/last; } @@ -2884,7 +2903,7 @@ operator/(last_spec, const month& m) noexcept CONSTCD11 inline month_day_last -operator/(int m, last_spec) noexcept +operator/(int m, last_spec) NOEXCEPT { return month(static_cast(m))/last; } @@ -2892,7 +2911,7 @@ operator/(int m, last_spec) noexcept CONSTCD11 inline month_day_last -operator/(last_spec, int m) noexcept +operator/(last_spec, int m) NOEXCEPT { return m/last; } @@ -2902,7 +2921,7 @@ operator/(last_spec, int m) noexcept CONSTCD11 inline month_weekday -operator/(const month& m, const weekday_indexed& wdi) noexcept +operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT { return {m, wdi}; } @@ -2910,7 +2929,7 @@ operator/(const month& m, const weekday_indexed& wdi) noexcept CONSTCD11 inline month_weekday -operator/(const weekday_indexed& wdi, const month& m) noexcept +operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT { return m / wdi; } @@ -2918,7 +2937,7 @@ operator/(const weekday_indexed& wdi, const month& m) noexcept CONSTCD11 inline month_weekday -operator/(int m, const weekday_indexed& wdi) noexcept +operator/(int m, const weekday_indexed& wdi) NOEXCEPT { return month(static_cast(m)) / wdi; } @@ -2926,7 +2945,7 @@ operator/(int m, const weekday_indexed& wdi) noexcept CONSTCD11 inline month_weekday -operator/(const weekday_indexed& wdi, int m) noexcept +operator/(const weekday_indexed& wdi, int m) NOEXCEPT { return m / wdi; } @@ -2936,7 +2955,7 @@ operator/(const weekday_indexed& wdi, int m) noexcept CONSTCD11 inline month_weekday_last -operator/(const month& m, const weekday_last& wdl) noexcept +operator/(const month& m, const weekday_last& wdl) NOEXCEPT { return {m, wdl}; } @@ -2944,7 +2963,7 @@ operator/(const month& m, const weekday_last& wdl) noexcept CONSTCD11 inline month_weekday_last -operator/(const weekday_last& wdl, const month& m) noexcept +operator/(const weekday_last& wdl, const month& m) NOEXCEPT { return m / wdl; } @@ -2952,7 +2971,7 @@ operator/(const weekday_last& wdl, const month& m) noexcept CONSTCD11 inline month_weekday_last -operator/(int m, const weekday_last& wdl) noexcept +operator/(int m, const weekday_last& wdl) NOEXCEPT { return month(static_cast(m)) / wdl; } @@ -2960,7 +2979,7 @@ operator/(int m, const weekday_last& wdl) noexcept CONSTCD11 inline month_weekday_last -operator/(const weekday_last& wdl, int m) noexcept +operator/(const weekday_last& wdl, int m) NOEXCEPT { return m / wdl; } @@ -2970,7 +2989,7 @@ operator/(const weekday_last& wdl, int m) noexcept CONSTCD11 inline year_month_day -operator/(const year_month& ym, const day& d) noexcept +operator/(const year_month& ym, const day& d) NOEXCEPT { return {ym.year(), ym.month(), d}; } @@ -2978,7 +2997,7 @@ operator/(const year_month& ym, const day& d) noexcept CONSTCD11 inline year_month_day -operator/(const year_month& ym, int d) noexcept +operator/(const year_month& ym, int d) NOEXCEPT { return ym / day(static_cast(d)); } @@ -2986,7 +3005,7 @@ operator/(const year_month& ym, int d) noexcept CONSTCD11 inline year_month_day -operator/(const year& y, const month_day& md) noexcept +operator/(const year& y, const month_day& md) NOEXCEPT { return y / md.month() / md.day(); } @@ -2994,7 +3013,7 @@ operator/(const year& y, const month_day& md) noexcept CONSTCD11 inline year_month_day -operator/(int y, const month_day& md) noexcept +operator/(int y, const month_day& md) NOEXCEPT { return year(y) / md; } @@ -3002,7 +3021,7 @@ operator/(int y, const month_day& md) noexcept CONSTCD11 inline year_month_day -operator/(const month_day& md, const year& y) noexcept +operator/(const month_day& md, const year& y) NOEXCEPT { return y / md; } @@ -3010,7 +3029,7 @@ operator/(const month_day& md, const year& y) noexcept CONSTCD11 inline year_month_day -operator/(const month_day& md, int y) noexcept +operator/(const month_day& md, int y) NOEXCEPT { return year(y) / md; } @@ -3020,7 +3039,7 @@ operator/(const month_day& md, int y) noexcept CONSTCD11 inline year_month_day_last -operator/(const year_month& ym, last_spec) noexcept +operator/(const year_month& ym, last_spec) NOEXCEPT { return {ym.year(), month_day_last{ym.month()}}; } @@ -3028,7 +3047,7 @@ operator/(const year_month& ym, last_spec) noexcept CONSTCD11 inline year_month_day_last -operator/(const year& y, const month_day_last& mdl) noexcept +operator/(const year& y, const month_day_last& mdl) NOEXCEPT { return {y, mdl}; } @@ -3036,7 +3055,7 @@ operator/(const year& y, const month_day_last& mdl) noexcept CONSTCD11 inline year_month_day_last -operator/(int y, const month_day_last& mdl) noexcept +operator/(int y, const month_day_last& mdl) NOEXCEPT { return year(y) / mdl; } @@ -3044,7 +3063,7 @@ operator/(int y, const month_day_last& mdl) noexcept CONSTCD11 inline year_month_day_last -operator/(const month_day_last& mdl, const year& y) noexcept +operator/(const month_day_last& mdl, const year& y) NOEXCEPT { return y / mdl; } @@ -3052,7 +3071,7 @@ operator/(const month_day_last& mdl, const year& y) noexcept CONSTCD11 inline year_month_day_last -operator/(const month_day_last& mdl, int y) noexcept +operator/(const month_day_last& mdl, int y) NOEXCEPT { return year(y) / mdl; } @@ -3062,7 +3081,7 @@ operator/(const month_day_last& mdl, int y) noexcept CONSTCD11 inline year_month_weekday -operator/(const year_month& ym, const weekday_indexed& wdi) noexcept +operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT { return {ym.year(), ym.month(), wdi}; } @@ -3070,7 +3089,7 @@ operator/(const year_month& ym, const weekday_indexed& wdi) noexcept CONSTCD11 inline year_month_weekday -operator/(const year& y, const month_weekday& mwd) noexcept +operator/(const year& y, const month_weekday& mwd) NOEXCEPT { return {y, mwd.month(), mwd.weekday_indexed()}; } @@ -3078,7 +3097,7 @@ operator/(const year& y, const month_weekday& mwd) noexcept CONSTCD11 inline year_month_weekday -operator/(int y, const month_weekday& mwd) noexcept +operator/(int y, const month_weekday& mwd) NOEXCEPT { return year(y) / mwd; } @@ -3086,7 +3105,7 @@ operator/(int y, const month_weekday& mwd) noexcept CONSTCD11 inline year_month_weekday -operator/(const month_weekday& mwd, const year& y) noexcept +operator/(const month_weekday& mwd, const year& y) NOEXCEPT { return y / mwd; } @@ -3094,7 +3113,7 @@ operator/(const month_weekday& mwd, const year& y) noexcept CONSTCD11 inline year_month_weekday -operator/(const month_weekday& mwd, int y) noexcept +operator/(const month_weekday& mwd, int y) NOEXCEPT { return year(y) / mwd; } @@ -3104,7 +3123,7 @@ operator/(const month_weekday& mwd, int y) noexcept CONSTCD11 inline year_month_weekday_last -operator/(const year_month& ym, const weekday_last& wdl) noexcept +operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT { return {ym.year(), ym.month(), wdl}; } @@ -3112,7 +3131,7 @@ operator/(const year_month& ym, const weekday_last& wdl) noexcept CONSTCD11 inline year_month_weekday_last -operator/(const year& y, const month_weekday_last& mwdl) noexcept +operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT { return {y, mwdl.month(), mwdl.weekday_last()}; } @@ -3120,7 +3139,7 @@ operator/(const year& y, const month_weekday_last& mwdl) noexcept CONSTCD11 inline year_month_weekday_last -operator/(int y, const month_weekday_last& mwdl) noexcept +operator/(int y, const month_weekday_last& mwdl) NOEXCEPT { return year(y) / mwdl; } @@ -3128,7 +3147,7 @@ operator/(int y, const month_weekday_last& mwdl) noexcept CONSTCD11 inline year_month_weekday_last -operator/(const month_weekday_last& mwdl, const year& y) noexcept +operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT { return y / mwdl; } @@ -3136,7 +3155,7 @@ operator/(const month_weekday_last& mwdl, const year& y) noexcept CONSTCD11 inline year_month_weekday_last -operator/(const month_weekday_last& mwdl, int y) noexcept +operator/(const month_weekday_last& mwdl, int y) NOEXCEPT { return year(y) / mwdl; } @@ -3157,6 +3176,8 @@ enum class classify subsecond }; +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) + template struct classify_duration { @@ -3168,6 +3189,33 @@ struct classify_duration classify::subsecond; }; +#else + +template +struct classify_duration +{ + static CONSTDATA classify value = + std::ratio_greater_equal< + typename Duration::period, + days::period >::value + ? classify::not_valid : + std::ratio_greater_equal< + typename Duration::period, + std::chrono::hours::period>::value + ? classify::hour : + std::ratio_greater_equal< + typename Duration::period, + std::chrono::minutes::period>::value + ? classify::minute : + std::ratio_greater_equal< + typename Duration::period, + std::chrono::seconds::period>::value + ? classify::second : + classify::subsecond; +}; + +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) + class time_of_day_base { protected: @@ -3176,13 +3224,13 @@ protected: enum {is24hr}; - CONSTCD11 time_of_day_base(std::chrono::hours h, unsigned m) noexcept + CONSTCD11 time_of_day_base(std::chrono::hours h, unsigned m) NOEXCEPT : h_(h) , mode_(static_cast(m)) {} - CONSTCD14 void make24() noexcept; - CONSTCD14 void make12() noexcept; + CONSTCD14 void make24() NOEXCEPT; + CONSTCD14 void make12() NOEXCEPT; CONSTCD14 std::chrono::hours to24hr() const; }; @@ -3210,7 +3258,7 @@ time_of_day_base::to24hr() const CONSTCD14 inline void -time_of_day_base::make24() noexcept +time_of_day_base::make24() NOEXCEPT { h_ = to24hr(); mode_ = is24hr; @@ -3219,7 +3267,7 @@ time_of_day_base::make24() noexcept CONSTCD14 inline void -time_of_day_base::make12() noexcept +time_of_day_base::make12() NOEXCEPT { if (mode_ == is24hr) { @@ -3251,36 +3299,36 @@ class time_of_day_storage, detail::classify:: public: using precision = std::chrono::hours; - CONSTCD11 explicit time_of_day_storage(std::chrono::hours since_midnight) noexcept + CONSTCD11 explicit time_of_day_storage(std::chrono::hours since_midnight) NOEXCEPT : base(since_midnight, is24hr) {} - CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, unsigned md) noexcept + CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, unsigned md) NOEXCEPT : base(h, md) {} - CONSTCD11 std::chrono::hours hours() const noexcept {return h_;} - CONSTCD11 unsigned mode() const noexcept {return mode_;} + CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} + CONSTCD11 unsigned mode() const NOEXCEPT {return mode_;} - CONSTCD14 explicit operator precision() const noexcept + CONSTCD14 explicit operator precision() const NOEXCEPT { return to24hr(); } - CONSTCD14 precision to_duration() const noexcept + CONSTCD14 precision to_duration() const NOEXCEPT { return static_cast(*this); } - CONSTCD14 time_of_day_storage& make24() noexcept {base::make24(); return *this;} - CONSTCD14 time_of_day_storage& make12() noexcept {base::make12(); return *this;} + CONSTCD14 time_of_day_storage& make24() NOEXCEPT {base::make24(); return *this;} + CONSTCD14 time_of_day_storage& make12() NOEXCEPT {base::make12(); return *this;} friend std::ostream& operator<<(std::ostream& os, const time_of_day_storage& t) { using namespace std; - save_stream _(os); + detail::save_stream _(os); os.fill('0'); os.flags(std::ios::dec | std::ios::right); if (t.mode_ != am && t.mode_ != pm) @@ -3313,40 +3361,40 @@ class time_of_day_storage, detail::classify:: public: using precision = std::chrono::minutes; - CONSTCD11 explicit time_of_day_storage(std::chrono::minutes since_midnight) noexcept + CONSTCD11 explicit time_of_day_storage(std::chrono::minutes since_midnight) NOEXCEPT : base(std::chrono::duration_cast(since_midnight), is24hr) , m_(since_midnight - h_) {} CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m, - unsigned md) noexcept + unsigned md) NOEXCEPT : base(h, md) , m_(m) {} - CONSTCD11 std::chrono::hours hours() const noexcept {return h_;} - CONSTCD11 std::chrono::minutes minutes() const noexcept {return m_;} - CONSTCD11 unsigned mode() const noexcept {return mode_;} + CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} + CONSTCD11 std::chrono::minutes minutes() const NOEXCEPT {return m_;} + CONSTCD11 unsigned mode() const NOEXCEPT {return mode_;} - CONSTCD14 explicit operator precision() const noexcept + CONSTCD14 explicit operator precision() const NOEXCEPT { return to24hr() + m_; } - CONSTCD14 precision to_duration() const noexcept + CONSTCD14 precision to_duration() const NOEXCEPT { return static_cast(*this); } - CONSTCD14 time_of_day_storage& make24() noexcept {base::make24(); return *this;} - CONSTCD14 time_of_day_storage& make12() noexcept {base::make12(); return *this;} + CONSTCD14 time_of_day_storage& make24() NOEXCEPT {base::make24(); return *this;} + CONSTCD14 time_of_day_storage& make12() NOEXCEPT {base::make12(); return *this;} friend std::ostream& operator<<(std::ostream& os, const time_of_day_storage& t) { using namespace std; - save_stream _(os); + detail::save_stream _(os); if (static_cast(t) < std::chrono::hours{0}) os << '-'; os.fill('0'); @@ -3381,43 +3429,43 @@ class time_of_day_storage, detail::classify:: public: using precision = std::chrono::seconds; - CONSTCD11 explicit time_of_day_storage(std::chrono::seconds since_midnight) noexcept + CONSTCD11 explicit time_of_day_storage(std::chrono::seconds since_midnight) NOEXCEPT : base(std::chrono::duration_cast(since_midnight), is24hr) , m_(std::chrono::duration_cast(since_midnight - h_)) , s_(since_midnight - h_ - m_) {} CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m, - std::chrono::seconds s, unsigned md) noexcept + std::chrono::seconds s, unsigned md) NOEXCEPT : base(h, md) , m_(m) , s_(s) {} - CONSTCD11 std::chrono::hours hours() const noexcept {return h_;} - CONSTCD11 std::chrono::minutes minutes() const noexcept {return m_;} - CONSTCD11 std::chrono::seconds seconds() const noexcept {return s_;} - CONSTCD11 unsigned mode() const noexcept {return mode_;} + CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} + CONSTCD11 std::chrono::minutes minutes() const NOEXCEPT {return m_;} + CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_;} + CONSTCD11 unsigned mode() const NOEXCEPT {return mode_;} - CONSTCD14 explicit operator precision() const noexcept + CONSTCD14 explicit operator precision() const NOEXCEPT { return to24hr() + m_ + s_; } - CONSTCD14 precision to_duration() const noexcept + CONSTCD14 precision to_duration() const NOEXCEPT { return static_cast(*this); } - CONSTCD14 time_of_day_storage& make24() noexcept {base::make24(); return *this;} - CONSTCD14 time_of_day_storage& make12() noexcept {base::make12(); return *this;} + CONSTCD14 time_of_day_storage& make24() NOEXCEPT {base::make24(); return *this;} + CONSTCD14 time_of_day_storage& make12() NOEXCEPT {base::make12(); return *this;} friend std::ostream& operator<<(std::ostream& os, const time_of_day_storage& t) { using namespace std; - save_stream _(os); + detail::save_stream _(os); if (static_cast(t) < std::chrono::hours{0}) os << '-'; os.fill('0'); @@ -3457,7 +3505,7 @@ private: precision sub_s_; public: - CONSTCD11 explicit time_of_day_storage(precision since_midnight) noexcept + CONSTCD11 explicit time_of_day_storage(precision since_midnight) NOEXCEPT : base(std::chrono::duration_cast(since_midnight), is24hr) , m_(std::chrono::duration_cast(since_midnight - h_)) , s_(std::chrono::duration_cast(since_midnight - h_ - m_)) @@ -3466,38 +3514,38 @@ public: CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m, std::chrono::seconds s, precision sub_s, - unsigned md) noexcept + unsigned md) NOEXCEPT : base(h, md) , m_(m) , s_(s) , sub_s_(sub_s) {} - CONSTCD11 std::chrono::hours hours() const noexcept {return h_;} - CONSTCD11 std::chrono::minutes minutes() const noexcept {return m_;} - CONSTCD11 std::chrono::seconds seconds() const noexcept {return s_;} - CONSTCD11 precision subseconds() const noexcept {return sub_s_;} - CONSTCD11 unsigned mode() const noexcept {return mode_;} + CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} + CONSTCD11 std::chrono::minutes minutes() const NOEXCEPT {return m_;} + CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_;} + CONSTCD11 precision subseconds() const NOEXCEPT {return sub_s_;} + CONSTCD11 unsigned mode() const NOEXCEPT {return mode_;} - CONSTCD14 explicit operator precision() const noexcept + CONSTCD14 explicit operator precision() const NOEXCEPT { return to24hr() + m_ + s_ + sub_s_; } - CONSTCD14 precision to_duration() const noexcept + CONSTCD14 precision to_duration() const NOEXCEPT { return static_cast(*this); } - CONSTCD14 time_of_day_storage& make24() noexcept {base::make24(); return *this;} - CONSTCD14 time_of_day_storage& make12() noexcept {base::make12(); return *this;} + CONSTCD14 time_of_day_storage& make24() NOEXCEPT {base::make24(); return *this;} + CONSTCD14 time_of_day_storage& make12() NOEXCEPT {base::make12(); return *this;} friend std::ostream& operator<<(std::ostream& os, const time_of_day_storage& t) { using namespace std; - save_stream _(os); + detail::save_stream _(os); if (static_cast(t) < std::chrono::hours{0}) os << '-'; os.fill('0'); @@ -3536,7 +3584,7 @@ public: private: #if __cplusplus >= 201402 - CONSTCD11 static int ceil_log10(unsigned long long i) noexcept + CONSTCD11 static int ceil_log10(unsigned long long i) NOEXCEPT { --i; int n = 0; @@ -3549,7 +3597,7 @@ private: return n; } - CONSTCD11 static unsigned long long pow10(unsigned y) noexcept + CONSTCD11 static unsigned long long pow10(unsigned y) NOEXCEPT { CONSTDATA unsigned long long p10[] = { @@ -3587,7 +3635,14 @@ class time_of_day { using base = detail::time_of_day_storage; public: +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) using base::base; +#else + template + explicit time_of_day(Args&& ...args) + : base(std::forward(args)...) + {} +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) }; template > -make_time(std::chrono::duration d) noexcept +make_time(std::chrono::duration d) NOEXCEPT { return time_of_day>(d); } @@ -3604,7 +3659,7 @@ make_time(std::chrono::duration d) noexcept CONSTCD11 inline time_of_day -make_time(std::chrono::hours h, unsigned md) noexcept +make_time(std::chrono::hours h, unsigned md) NOEXCEPT { return time_of_day(h, md); } @@ -3612,7 +3667,7 @@ make_time(std::chrono::hours h, unsigned md) noexcept CONSTCD11 inline time_of_day -make_time(std::chrono::hours h, std::chrono::minutes m, unsigned md) noexcept +make_time(std::chrono::hours h, std::chrono::minutes m, unsigned md) NOEXCEPT { return time_of_day(h, m, md); } @@ -3621,7 +3676,7 @@ CONSTCD11 inline time_of_day make_time(std::chrono::hours h, std::chrono::minutes m, std::chrono::seconds s, - unsigned md) noexcept + unsigned md) NOEXCEPT { return time_of_day(h, m, s, md); } @@ -3633,7 +3688,7 @@ CONSTCD11 inline time_of_day> make_time(std::chrono::hours h, std::chrono::minutes m, std::chrono::seconds s, - std::chrono::duration sub_s, unsigned md) noexcept + std::chrono::duration sub_s, unsigned md) NOEXCEPT { return time_of_day>(h, m, s, sub_s, md); }