Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r84350 - in sandbox/chrono_date: boost/chrono/date boost/chrono/date/detail libs/date/doc libs/date/example libs/date/perf libs/date/src libs/date/test/dates/days libs/date/test/dates/ydoy libs/date/test/dates/ymd libs/date/test/wrappers
From: vicente.botet_at_[hidden]
Date: 2013-05-18 08:33:53


Author: viboes
Date: 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
New Revision: 84350
URL: http://svn.boost.org/trac/boost/changeset/84350

Log:
Chrono/Date: split between checked and uncehecked dates and some unit specifiers.
Text files modified:
   sandbox/chrono_date/boost/chrono/date/config.hpp | 4
   sandbox/chrono_date/boost/chrono/date/date_generators.hpp | 22
   sandbox/chrono_date/boost/chrono/date/date_io.hpp | 10
   sandbox/chrono_date/boost/chrono/date/day.hpp | 62 ++
   sandbox/chrono_date/boost/chrono/date/days_date.hpp | 54
   sandbox/chrono_date/boost/chrono/date/detail/bounded.hpp | 197 +++++-
   sandbox/chrono_date/boost/chrono/date/exceptions.hpp | 8
   sandbox/chrono_date/boost/chrono/date/is_date.hpp | 3
   sandbox/chrono_date/boost/chrono/date/month.hpp | 114 +++
   sandbox/chrono_date/boost/chrono/date/month_nth.hpp | 12
   sandbox/chrono_date/boost/chrono/date/month_nth_weekday.hpp | 16
   sandbox/chrono_date/boost/chrono/date/nth.hpp | 4
   sandbox/chrono_date/boost/chrono/date/nth_week.hpp | 4
   sandbox/chrono_date/boost/chrono/date/nth_weekday.hpp | 8
   sandbox/chrono_date/boost/chrono/date/relative_date.hpp | 10
   sandbox/chrono_date/boost/chrono/date/tuples.hpp | 520 ++++++++++++----
   sandbox/chrono_date/boost/chrono/date/ydoy_date.hpp | 32
   sandbox/chrono_date/boost/chrono/date/year.hpp | 39
   sandbox/chrono_date/boost/chrono/date/ymd_date.hpp | 1193 +++++++++++++++++++++++++++------------
   sandbox/chrono_date/libs/date/doc/Jamfile.v2 | 9
   sandbox/chrono_date/libs/date/example/hello_world.cpp | 4
   sandbox/chrono_date/libs/date/example/julian.cpp | 2
   sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp | 256 +++++++-
   sandbox/chrono_date/libs/date/src/conversions.cpp | 4
   sandbox/chrono_date/libs/date/src/rel_date.cpp | 6
   sandbox/chrono_date/libs/date/src/vars.cpp | 95 +-
   sandbox/chrono_date/libs/date/src/ymd_date.cpp | 241 +++++++
   sandbox/chrono_date/libs/date/test/dates/days/days_date_pass.cpp | 20
   sandbox/chrono_date/libs/date/test/dates/ydoy/ydoy_date_pass.cpp | 32
   sandbox/chrono_date/libs/date/test/dates/ymd/ymd_date_pass.cpp | 77 +-
   sandbox/chrono_date/libs/date/test/wrappers/day_pass.cpp | 10
   sandbox/chrono_date/libs/date/test/wrappers/month_pass.cpp | 12
   32 files changed, 2254 insertions(+), 826 deletions(-)

Modified: sandbox/chrono_date/boost/chrono/date/config.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/config.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/config.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -31,9 +31,9 @@
 //#define BOOST_CHRONO_DATE_DATE_DESIGN_BUG
 
 #if ! defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) || defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
-#define BOOST_CHRONO_EXPLICT explicit
+#define BOOST_CHRONO_EXPLICIT explicit
 #else
-#define BOOST_CHRONO_EXPLICT
+#define BOOST_CHRONO_EXPLICIT
 #endif
 
 #if ! defined BOOST_NO_CXX11_CONSTEXPR && defined __clang__

Modified: sandbox/chrono_date/boost/chrono/date/date_generators.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/date_generators.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/date_generators.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -121,22 +121,22 @@
       Date res;
       if (month(d)==dec)
       { // dec and jan have 31 days
- res = Date(year(d),month(d),n.value());
+ res = Date(year(d),month(d),day(n.value()));
 
         if (res > d) return res;
- return Date(year(d),jan,n.value());
+ return Date(year(d),jan,day(n.value()));
       }
 
       if (n.value()>28)
       { // As feb could have 29,30 and 31, we need to validate the two first dates
- if (res.set_if_valid_date(year(d),month(d),day(n.value())) && res > d) return res;
- if (res.set_if_valid_date(year(d),month(month(d)+1),day(n.value())) && res > d) return res;
- return Date(year(d),month(month(d)+2),day(n.value())) ;
+ if (res.set_if_valid_date(year(d),month(d),day(n.value(), no_check)) && res > d) return res;
+ if (res.set_if_valid_date(year(d),month(month(d)+1),day(n.value(), no_check)) && res > d) return res;
+ return Date(year(d),month(month(d)+2),day(n.value(), no_check)) ;
       }
       // nth <= 28 is always valid, so the next is either in this month or the next one
- res = Date(year(d),month(d),n.value());
+ res = Date(year(d),month(d),day(n.value()));
       if (res > d) return res;
- return Date(year(d),month(month(d)+1),day(n.value()));
+ return Date(year(d),month(month(d)+1),day(n.value(), no_check));
     }
     template <typename Date>
     BOOST_FORCEINLINE Date
@@ -152,14 +152,14 @@
 
       if (n.value()>28)
       { // As feb could have 29,30 and 31, we need to validate the two first dates
- if (res.set_if_valid_date(year(d),month(d),day(n.value())) && res >= d) return res;
- if (res.set_if_valid_date(year(d),month(month(d)+1),day(n.value())) && res >= d) return res;
- return Date(year(d),month(d)+2,n.value()) ;
+ if (res.set_if_valid_date(year(d),month(d),day(n.value(), no_check)) && res >= d) return res;
+ if (res.set_if_valid_date(year(d),month(month(d)+1),day(n.value(), no_check)) && res >= d) return res;
+ return Date(year(d),month(d)+2,n.value(), no_check) ;
       }
       // nth <= 28 is always valid, so the next is either in this month or the next one
       res = Date(year(d),month(d),n.value());
       if (res >= d) return res;
- return Date(year(d),month(month(d)+1),n.value());
+ return Date(year(d),month(month(d)+1),n.value(), no_check);
     }
 
 

Modified: sandbox/chrono_date/boost/chrono/date/date_io.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/date_io.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/date_io.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -107,8 +107,8 @@
        *
        * @param fmt
        * @param refs
- * @Effects: Constructs a @c datepunct by constructing the base class with @c refs.
- * @Postconditions: <c>fmt() == frmt</c>.
+ * @Effects Constructs a @c datepunct by constructing the base class with @c refs.
+ * @Postconditions <c>fmt() == frmt</c>.
        */
       explicit datepunct(string_type fmt, std::size_t refs = 0) :
         std::locale::facet(refs),
@@ -220,7 +220,7 @@
      *
      * @param is
      * @param item
- * @Effects: Behaves as a formatted input function. After constructing a
+ * @Effects Behaves as a formatted input function. After constructing a
      * @c sentry object, if the @c sentry converts to @c true, acquires the
      * @c time_get facet from the stream's locale. If the locale has a
      * @c datepunct facet,obtains the conversion specifier string from that
@@ -274,7 +274,7 @@
           if (!(err & std::ios_base::failbit))
           {
             item
- = Date(year(t.tm_year + 1900), chrono::month(t.tm_mon + 1), day(t.tm_mday));
+ = Date(year(t.tm_year + 1900), chrono::month(t.tm_mon + 1), day(t.tm_mday, no_check));
           }
         }
 #ifndef BOOST_NO_EXCEPTIONS
@@ -292,7 +292,7 @@
      *
      * @param os
      * @param item
- * @Effects: Behaves as a formatted output function. After constructing a
+ * @Effects Behaves as a formatted output function. After constructing a
      * @c sentry object, if the @c sentry converts to @c true, acquires the
      * @c time_put facet from the stream's locale. If the locale has a
      * @c datepunct facet, obtains the formatting string from that facet,

Modified: sandbox/chrono_date/boost/chrono/date/day.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/day.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/day.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -21,16 +21,76 @@
      * day tag
      */
     struct day_tag {};
+
+ namespace unchecked
+ {
+ class day: public bounded<day_tag, 1, 31, day_rep>
+ {
+ typedef bounded<day_tag, 1, 31, day_rep> base_type;
+ public:
+ /**
+ * @Effects Constructs an object of class day by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == v</c>.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit day(int v) BOOST_NOEXCEPT:
+ base_type(v, no_check)
+ {
+ }
+ };
+ /**
+ * synonym of day.
+ */
+ typedef day day_of_month;
+ }
     /**
      * The class @c day is used to specify the day of the month when constructing dates. Its range is [1,31].
      */
- typedef bounded<day_tag, 1, 31, day_rep> day;
 
+ class day: public bounded<day_tag, 1, 31, day_rep>
+ {
+ typedef bounded<day_tag, 1, 31, day_rep> base_type;
+ public:
+ /**
+ * @Effects Constructs an object of class day by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == y</c>.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit day(int v, no_check_t) BOOST_NOEXCEPT:
+ base_type(v, no_check)
+ {
+ }
+ /**
+ * @Effects Constructs an object of class day by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == y</c>.
+ * @Throws if @c v is outside of the range [1,31], throws an exception of type @c std::out_of_range.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit day(int v) :
+ base_type(v, check)
+ {
+ }
+ /**
+ * @Effects Constructs an object of class day by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == v.value()</c>.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit day(unchecked::day v) :
+ base_type(v.value(), check)
+ {
+ }
+
+ /**
+ * Explicit
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator unchecked::day() BOOST_NOEXCEPT
+ {
+ return unchecked::day(value());
+ }
+
+ };
     /**
      * synonym of day.
      */
     typedef day day_of_month;
 
+
   } // chrono
 } // boost
 

Modified: sandbox/chrono_date/boost/chrono/date/days_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/days_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/days_date.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -204,7 +204,7 @@
 
 // // Conversions
 // /**
-// * @Effects: @c tp is converted to UTC, and then truncated to 00:00:00 hours.
+// * @Effects @c tp is converted to UTC, and then truncated to 00:00:00 hours.
 // * A @c days_date is created which reflects this point in time.
 // * @Throws If the conversion from @c tp overflows the range of @c days_date, throws
 // * an exception of type @c bad_date.
@@ -215,7 +215,7 @@
 // * @Returns: A system_clock::time_point which represents the @c days_date
 // * referred to by *this at 00:00:00 UTC.
 // *
-// * @Throws: If the conversion to @c tp overflows the range of
+// * @Throws If the conversion to @c tp overflows the range of
 // * system_clock::time_point, throws an exception of type @c bad_date.
 // *
 // */
@@ -247,7 +247,7 @@
        */
       BOOST_FORCEINLINE chrono::day to_day() const BOOST_NOEXCEPT
       {
- return chrono::day(day_from_day_number());
+ return chrono::day(day_from_day_number(), no_check);
       }
 // /**
 // * Returns: <c>chrono::day(d_)</c>.
@@ -263,7 +263,7 @@
        */
       BOOST_FORCEINLINE chrono::month to_month() const BOOST_NOEXCEPT
       {
- return chrono::month(month_from_day_number());
+ return chrono::month(month_from_day_number(), no_check);
       }
 // /**
 // * Returns: <c>chrono::month(m_)</c>.
@@ -304,18 +304,18 @@
 // {
 // return to_is_leap_year();
 // }
- /**
- * @return the @c month_day built from the @c month and @c day associated to the date.
- */
- chrono::month_day month_day() const BOOST_NOEXCEPT;
- /**
- * @return the @c year_month built from the @c year and @c month associated to the date.
- */
- chrono::year_month year_month() const BOOST_NOEXCEPT;
- /**
- * @return the @c year_month_day built from the @c year, @c month and @c day associated to the date.
- */
- chrono::year_month_day year_month_day() const BOOST_NOEXCEPT;
+// /**
+// * @return the @c month_day built from the @c month and @c day associated to the date.
+// */
+// chrono::month_day to_month_day() const BOOST_NOEXCEPT;
+// /**
+// * @return the @c year_month built from the @c year and @c month associated to the date.
+// */
+// chrono::year_month to_year_month() const BOOST_NOEXCEPT;
+// /**
+// * @return the @c year_month_day built from the @c year, @c month and @c day associated to the date.
+// */
+// chrono::year_month_day to_year_month_day() const BOOST_NOEXCEPT;
 
       /**
        * @Returns: A weekday constructed with an int corresponding to *this
@@ -331,23 +331,23 @@
        * days_date's day of the week (a value in the range of [0 - 6], 0 is Sunday).
        */
       //BOOST_CONSTEXPR chrono::weekday weekday() const BOOST_NOEXCEPT
- BOOST_FORCEINLINE BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return to_weekday();
       }
 
       // Days Based Arithmetic
       /**
- * @Effects: Adds @c d.count() days to the current @c days_date.
+ * @Effects Adds @c d.count() days to the current @c days_date.
        * @Returns: <c>*this</c>.
- * @Throws: If the addition would create a @c days_date with a year() outside of the
+ * @Throws If the addition would create a @c days_date with a year() outside of the
        * range of @c year, throws an exception of type @c bad_date.
        *
        */
       days_date& operator+=(days d);
 
       /**
- * @Effects: <c>*this += days(1)</c>.
+ * @Effects <c>*this += days(1)</c>.
        * @Returns: <c>*this</c>.
        */
       BOOST_FORCEINLINE days_date& operator++()
@@ -355,7 +355,7 @@
         return *this += days(1);
       }
       /**
- * @Effects: <c>*this += days(1)</c>.
+ * @Effects <c>*this += days(1)</c>.
        * @Returns: A copy of @c *this prior to the increment.
        */
       BOOST_FORCEINLINE days_date operator++(int)
@@ -365,7 +365,7 @@
         return tmp;
       }
       /**
- * @Effects: <c>*this += -d</c>.
+ * @Effects <c>*this += -d</c>.
        * @Returns: <c>*this</c>.
        */
       BOOST_FORCEINLINE days_date& operator-=(days d)
@@ -373,7 +373,7 @@
         return *this += -d;
       }
       /**
- * @Effects: <c>*this -= days(1)</c>.
+ * @Effects <c>*this -= days(1)</c>.
        * @Returns: <c>*this</c>.
        */
       BOOST_FORCEINLINE days_date& operator--()
@@ -381,7 +381,7 @@
         return *this -= days(1);
       }
       /**
- * @Effects: <c>*this -= days(1)</c>.
+ * @Effects <c>*this -= days(1)</c>.
        * @Returns: A copy of @c *this prior to the increment.
        */
       BOOST_FORCEINLINE days_date operator--(int)
@@ -433,7 +433,7 @@
 // *
 // * @Returns: @c *this.
 // *
-// * @Throws: If the addition would create a @c days_date with a @c y_ outside of the
+// * @Throws If the addition would create a @c days_date with a @c y_ outside of the
 // * range of @c year, or a @c d_ outside the range for the newly computed @c y_/@c m_,
 // * throws an exception of type @c bad_date.
 // *
@@ -479,12 +479,12 @@
 // // Years Based Arithmetic
 //
 // /*
-// * @Effects: Adds @c y.count() years to the current date.
+// * @Effects Adds @c y.count() years to the current date.
 // * This is accomplished as if by storing temporary values of the days_date's
 // * @c year @c y_, @c month @c m_, @c day @c d_. Computing a new value for @c y_. And then assigning to @c *this
 // * a new @c days_date constructed from the newly computed @c y_, and the original @c m_, @c d_.
 // * @Returns: @c *this.
-// * @Throws: If the addition would create a @c days_date with a @c y_ outside of the
+// * @Throws If the addition would create a @c days_date with a @c y_ outside of the
 // * range of @c year, or a @c d_ outside the range for the newly computed @c y_/@c m_,
 // * throws an exception of type @c bad_date.
 // */

Modified: sandbox/chrono_date/boost/chrono/date/detail/bounded.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/detail/bounded.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/detail/bounded.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -29,9 +29,14 @@
     class bounded
     {
     public:
+ /// the underlying type
       typedef T rep;
- BOOST_STATIC_CONSTEXPR std::size_t size=last_-first_+1; // :5 bits
+ BOOST_STATIC_CONSTEXPR T first = first_;
+ BOOST_STATIC_CONSTEXPR T last = last_;
+ /// the number of elements in the bounded type
+ BOOST_STATIC_CONSTEXPR std::size_t size=last_-first_+1;
 
+#if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
     private:
       static BOOST_CONSTEXPR BOOST_FORCEINLINE bool is_valid_(int v) BOOST_NOEXCEPT
       {
@@ -56,27 +61,40 @@
             throw std::out_of_range("bounded " + boost::chrono::to_string(int(v)) + " is out of range");
       }
 #endif
+#endif
     public:
 
       /**
- * @Effects: Constructs an object of class @c bounded by storing @c d.
- * @Postconditions: <c>value() == d && is_valid()</c>.
- * @Throws: if @c d is outside of the range [first, last], throws an exception of type @c std::out_of_range.
+ * @c bounded is not @e DefaultConstructible
+ */
+#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
+ bounded() = delete;
+#else
+ private:
+ bounded();
+ public:
+#endif
+ /**
+ * @Effects Constructs an object of class @c bounded by storing @e d.
+ * @Postconditions <c>value() == d && is_valid()</c>.
+ * @Throws if @c d is outside of the range [first, last], throws an exception of type @c std::out_of_range.
        */
 
       BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d, check_t)
       : value_(check_invariants(d))
       {}
       /**
- * @Effects: Constructs an object of class @c bounded by storing @c d.
- * @Postconditions: <c>value() == d</c>.
+ * @Effects Constructs an object of class @c bounded by storing @c d.
+ * @Postconditions <c>value() == d</c>.
        * @Note This function doesn't check the parameters validity.
- * It is up to the user to provide a valid ones.
+ * It is up to the user to provide a valid one.
        */
- BOOST_FORCEINLINE BOOST_CONSTEXPR bounded(int d) BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d, no_check_t) BOOST_NOEXCEPT
+ : value_(d)
+ {}
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d) BOOST_NOEXCEPT
       : value_(d)
       {}
-
       /**
        * @Return if the stored value is a valid one.
        */
@@ -85,7 +103,6 @@
         return is_valid_(value_);
       }
       /**
- * @Requires @c is_valid()
        * @Returns the underlying value of that bounded.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR operator int() const BOOST_NOEXCEPT
@@ -93,45 +110,145 @@
         return value_;
       }
       /**
- * @Requires @c is_valid()
- * @Returns: the underlying value of that bounded.
+ * @Returns the underlying value of that bounded.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR int value() const BOOST_NOEXCEPT
       {
         return value_;
       }
- /**
- * @Returns: the min valid value for a bounded of a month.
- */
- static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded min BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT
- {
- return bounded(first_);
- }
- /**
- * @Returns: the max valid value for a bounded of a month.
- */
- static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded max BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT
- {
- return bounded(last_);
- }
- /**
- * @Returns: the first bounded.
- */
- static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded first() BOOST_NOEXCEPT
- {
- return bounded(first_);
- }
- /**
- * @Returns: the first bounded.
- */
- static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded last() BOOST_NOEXCEPT
- {
- return bounded(last_);
- }
+// /**
+// * @Returns the min valid value for a bounded of a month.
+// */
+// static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded min BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT
+// {
+// return bounded(first_, no_check);
+// }
+// /**
+// * @Returns the max valid value for a bounded of a month.
+// */
+// static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded max BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT
+// {
+// return bounded(last_, no_check);
+// }
+// /**
+// * @Returns the first bounded.
+// */
+// static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded first() BOOST_NOEXCEPT
+// {
+// return bounded(first_, no_check);
+// }
+// /**
+// * @Returns the first bounded.
+// */
+// static BOOST_FORCEINLINE BOOST_CONSTEXPR bounded last() BOOST_NOEXCEPT
+// {
+// return bounded(last_, no_check);
+// }
     private:
       rep value_;
     };
 
+ namespace unchecked
+ {
+ /**
+ * The class @c bounded is used to specify an opaque wrapper around integral type.
+ */
+ template <typename Tag, int first_, int last_, typename T=int>
+ class bounded
+ {
+ public:
+ /// the underlying type
+ typedef T rep;
+ BOOST_STATIC_CONSTEXPR T first = first_;
+ BOOST_STATIC_CONSTEXPR T last = last_;
+ /// the number of elements in the bounded type
+ BOOST_STATIC_CONSTEXPR std::size_t size=last_-first_+1;
+
+ #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
+ private:
+ static BOOST_CONSTEXPR BOOST_FORCEINLINE bool is_valid_(int v) BOOST_NOEXCEPT
+ {
+ return (first_ <= v && v <= last_);
+ }
+ #ifndef BOOST_NO_CXX11_CONSTEXPR
+ static BOOST_CONSTEXPR BOOST_FORCEINLINE int check_invariants(int v)
+ {
+ return is_valid_(v)
+ ? v
+ : throw std::out_of_range("bounded " + chrono::to_string(int(v)) + " is out of range " +
+ chrono::to_string(first_) + ".." + chrono::to_string(last_)
+ )
+ ;
+ }
+ #else
+ static BOOST_CONSTEXPR BOOST_FORCEINLINE int check_invariants(int v) BOOST_NOEXCEPT
+ {
+ if (is_valid_(v))
+ return v;
+ else
+ throw std::out_of_range("bounded " + boost::chrono::to_string(int(v)) + " is out of range");
+ }
+ #endif
+ #endif
+ public:
+
+ /**
+ * @c bounded is not @e DefaultConstructible
+ */
+ #ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
+ bounded() = delete;
+ #else
+ private:
+ bounded();
+ public:
+ #endif
+ /**
+ * @Effects Constructs an object of class @c bounded by storing @e d.
+ * @Postconditions <c>value() == d && is_valid()</c>.
+ * @Throws if @c d is outside of the range [first, last], throws an exception of type @c std::out_of_range.
+ */
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d, check_t)
+ : value_(check_invariants(d))
+ {}
+ /**
+ * @Effects Constructs an object of class @c bounded by storing @c d.
+ * @Postconditions <c>value() == d</c>.
+ * @Note This function doesn't check the parameters validity.
+ * It is up to the user to provide a valid one.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d, no_check_t) BOOST_NOEXCEPT
+ : value_(d)
+ {}
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit bounded(int d) BOOST_NOEXCEPT
+ : value_(d)
+ {}
+ /**
+ * @Return if the stored value is a valid one.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
+ {
+ return is_valid_(value_);
+ }
+ /**
+ * @Returns the underlying value of that bounded.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator int() const BOOST_NOEXCEPT
+ {
+ return value_;
+ }
+ /**
+ * @Returns the underlying value of that bounded.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR int value() const BOOST_NOEXCEPT
+ {
+ return value_;
+ }
+
+ private:
+ rep value_;
+ };
+ } //unchecked
 
   } // chrono
 

Modified: sandbox/chrono_date/boost/chrono/date/exceptions.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/exceptions.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/exceptions.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -28,8 +28,8 @@
     {
     public:
       /**
- * @Effects: Constructs an object of class @c bad_date.
- * @Postcondition: <c>what() == s</c>.
+ * @Effects Constructs an object of class @c bad_date.
+ * @Postcondition <c>what() == s</c>.
        */
       explicit bad_date(const std::string& s) :
       std::runtime_error(s)
@@ -37,8 +37,8 @@
       }
 
       /**
- * @Effects: Constructs an object of class @c bad_date.
- * @Postcondition: <c>strcmp(what(), s) == 0</c>.
+ * @Effects Constructs an object of class @c bad_date.
+ * @Postcondition <c>strcmp(what(), s) == 0</c>.
        */
       explicit bad_date(const char* s) :
       std::runtime_error(s)

Modified: sandbox/chrono_date/boost/chrono/date/is_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/is_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/is_date.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -21,7 +21,8 @@
 
     /*
      * Trait type for Date classes.
- */template <typename Date>
+ */
+ template <typename Date>
     struct is_date : false_type {};
 
 

Modified: sandbox/chrono_date/boost/chrono/date/month.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/month.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/month.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -13,6 +13,7 @@
 #include <boost/chrono/date/detail/helpers.hpp>
 #include <boost/chrono/date/detail/bounded.hpp>
 #include <boost/chrono/date/detail/helpers.hpp>
+//#include <boost/chrono/date/day.hpp>
 #include <boost/chrono/date/date_durations.hpp>
 
 
@@ -21,10 +22,71 @@
   namespace chrono
   {
 
+ namespace chrono_detail
+ {
+#ifndef BOOST_NO_CXX11_CONSTEXPR
+ BOOST_STATIC_CONSTEXPR day_rep leap_days_in_month_[13] =
+ { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+ BOOST_FORCEINLINE static BOOST_CONSTEXPR
+ day_rep leap_days_in_month(int d) BOOST_NOEXCEPT { return leap_days_in_month_[d]; }
+
+ BOOST_STATIC_CONSTEXPR day_rep normal_days_in_month_[13] =
+ { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+ BOOST_FORCEINLINE static BOOST_CONSTEXPR
+ day_rep normal_days_in_month(int d) BOOST_NOEXCEPT { return normal_days_in_month_[d]; }
+#else
+ extern day_rep leap_days_in_month_[];
+ BOOST_FORCEINLINE
+ day_rep leap_days_in_month(int d) BOOST_NOEXCEPT { return leap_days_in_month_[d]; }
+ extern day_rep normal_days_in_month_[];
+ BOOST_FORCEINLINE
+ day_rep normal_days_in_month(int d) BOOST_NOEXCEPT { return normal_days_in_month_[d]; }
+
+#endif
+
+ }
+
     /**
      * month tag
      */
     struct month_tag {};
+ namespace unchecked
+ {
+ /**
+ * The class @c month is used to specify the month of the year when constructing a date. Its range is [1,12].
+ */
+ class month: public bounded<month_tag, 1, 12, month_rep>
+ {
+ typedef bounded<month_tag, 1, 12, month_rep> base_type;
+ public:
+ /**
+ * @Effects Constructs an object of class month by storing m.
+ * @Postconditions static_cast<int>(*this) == m.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month(int m) :
+ base_type(m, no_check)
+ {
+ }
+
+ /**
+ * @Return the number of days of the month depending on the @c is_leap_year parameter.
+ *
+ * | leap | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
+ * | ----: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :- |
+ * | false | 31 | 28 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
+ * | true | 31 | 29 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
+ */
+
+ //BOOST_CHRONO_DATE_CONSTEXPR
+ BOOST_FORCEINLINE BOOST_CONSTEXPR days days_in(bool is_leap_year) const BOOST_NOEXCEPT
+ {
+ return (is_leap_year)
+ ? days(chrono_detail::leap_days_in_month(value()))
+ : days(chrono_detail::normal_days_in_month(value()))
+ ;
+ }
+ };
+ }
     /**
      * The class @c month is used to specify the month of the year when constructing a date. Its range is [1,12].
      */
@@ -33,29 +95,61 @@
       typedef bounded<month_tag, 1, 12, month_rep> base_type;
     public:
       /**
- * @Effects: Constructs an object of class month by storing m.
- * @Postconditions: static_cast<int>(*this) == m.
+ * @Effects Constructs an object of class month by storing m.
+ * @Postconditions static_cast<int>(*this) == m.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month(int m) :
+ base_type(m, check)
+ {
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month(int m, no_check_t) :
         base_type(m)
       {
       }
 
+// /**
+// * @Effects Constructs an object of class month by storing m.
+// * @Postconditions static_cast<int>(*this) == m.
+// * @Throws if m is outside of the supported range, throws an exception of type bad_date.
+// */
+// BOOST_FORCEINLINE BOOST_CONSTEXPR month(int m, check_t) BOOST_NOEXCEPT
+// : base_type(m, check)
+// {}
+
+
       /**
- * @Effects: Constructs an object of class month by storing m.
- * @Postconditions: static_cast<int>(*this) == m.
- * @Throws: if m is outside of the supported range, throws an exception of type bad_date.
+ * @Effects Constructs an object of class month by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == v.value()</c>.
        */
- BOOST_FORCEINLINE BOOST_CONSTEXPR month(int m, check_t) BOOST_NOEXCEPT
- : base_type(m, check)
- {}
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month(unchecked::month v) :
+ base_type(v.value(), check)
+ {
+ }
+
+ /**
+ * Explicit
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator unchecked::month()
+ {
+ return unchecked::month(value());
+ }
 
       /**
        * @Return the number of days of the month depending on the @c is_leap_year parameter.
+ *
+ * | leap | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
+ * | ----: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :- |
+ * | false | 31 | 28 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
+ * | true | 31 | 29 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
        */
- BOOST_FORCEINLINE days days_in(bool is_leap_year) const BOOST_NOEXCEPT
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR days days_in(bool is_leap_year) const BOOST_NOEXCEPT
       {
- return days(days_in_month(is_leap_year, value()));
+ return (is_leap_year)
+ ? days(chrono_detail::leap_days_in_month(value()))
+ : days(chrono_detail::normal_days_in_month(value()))
+ ;
+
       }
     };
 

Modified: sandbox/chrono_date/boost/chrono/date/month_nth.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/month_nth.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/month_nth.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -32,8 +32,8 @@
       nth d_; // :6
     public:
       /**
- * @Effects: Constructs an object of class @c month_nth by storing @c m and @c d.
- * @Postconditions: month() == m && nth() == d && is_valid().
+ * @Effects Constructs an object of class @c month_nth by storing @c m and @c d.
+ * @Postconditions month() == m && nth() == d && is_valid().
        * @Throws: if d is outside of the valid range of days of month @c m, throws an exception of type bad_date.
        */
       month_nth(month m, nth d, check_t)
@@ -46,8 +46,8 @@
         }
       }
       /**
- * @Effects: Constructs an object of class @c month_nth by storing @c m and @c d.
- * @Postconditions: month() == m && nth() == d.
+ * @Effects Constructs an object of class @c month_nth by storing @c m and @c d.
+ * @Postconditions month() == m && nth() == d.
        * @Note This function doesn't check the parameters validity.
        * It is up to the user to provide the valid ones.
        */
@@ -60,7 +60,7 @@
        * @Return the @c month component.
        */
       //BOOST_CONSTEXPR month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
@@ -68,7 +68,7 @@
        * @Return the @c nth component.
        */
       //BOOST_CONSTEXPR nth nth() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::nth() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::nth() const BOOST_NOEXCEPT
       {
         return d_;
       }

Modified: sandbox/chrono_date/boost/chrono/date/month_nth_weekday.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/month_nth_weekday.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/month_nth_weekday.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -31,8 +31,8 @@
       nth_weekday d_; // :6
     public:
 // /**
-// * @Effects: Constructs an object of class @c month_nth_weekday by storing @c m and @c nwd.
-// * @Postconditions: month() == m && nth_weekday() == nwd && is_valid().
+// * @Effects Constructs an object of class @c month_nth_weekday by storing @c m and @c nwd.
+// * @Postconditions month() == m && nth_weekday() == nwd && is_valid().
 // */
 // month_nth_weekday(month m, nth_weekday nwd, check_t) BOOST_NOEXCEPT
 // : m_(m, check),
@@ -41,8 +41,8 @@
 // // There is no bad combination, so no exception is thrown
 // }
       /**
- * @Effects: Constructs an object of class @c month_nth_weekday by storing @c m and @c nwd.
- * @Postconditions: month() == m && nth_weekday() == nwd.
+ * @Effects Constructs an object of class @c month_nth_weekday by storing @c m and @c nwd.
+ * @Postconditions month() == m && nth_weekday() == nwd.
        * @Note This function doesn't check the parameters validity.
        * It is up to the user to provide a valid ones.
        */
@@ -55,7 +55,7 @@
        * @Return the @c month component.
        */
       //month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
@@ -63,7 +63,7 @@
        * @Return the @c nth_weekday component.
        */
       //BOOST_CONSTEXPR nth_weekday nth_weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::nth_weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::nth_weekday() const BOOST_NOEXCEPT
       {
         return d_;
       }
@@ -132,12 +132,12 @@
       {
       }
       //month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
       //BOOST_CONSTEXPR dom dom() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::dom() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::dom() const BOOST_NOEXCEPT
       {
         return d_;
       }

Modified: sandbox/chrono_date/boost/chrono/date/nth.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/nth.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/nth.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -46,13 +46,13 @@
     public:
       BOOST_STATIC_CONSTEXPR rep not_applicable=7;
       /**
- * @Effects: Constructs an object of class @c nth by storing @c s.
+ * @Effects Constructs an object of class @c nth by storing @c s.
        * Throws: if @c s is outside of the range [1, 6], throws an exception of type bad_date.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR nth(int s, check_t) : base_type(s, check)
       {}
       /**
- * @Effects: Constructs an object of class @c nth by storing @c s.
+ * @Effects Constructs an object of class @c nth by storing @c s.
        * @Note This function doesn't check the parameters validity.
        * It is up to the user to provide a valid ones.
        */

Modified: sandbox/chrono_date/boost/chrono/date/nth_week.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/nth_week.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/nth_week.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -36,13 +36,13 @@
       BOOST_FORCEINLINE BOOST_CONSTEXPR nth_week() : base_type(not_applicable) {}
 
       /**
- * @Effects: Constructs an object of class @c nth_week by storing @c s.
+ * @Effects Constructs an object of class @c nth_week by storing @c s.
        * Throws: if @c s is outside of the range [1, 6], throws an exception of type bad_date.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR nth_week(int s, check_t) : base_type(s, check)
       {}
       /**
- * @Effects: Constructs an object of class @c nth_week by storing @c s.
+ * @Effects Constructs an object of class @c nth_week by storing @c s.
        * @Note This function doesn't check the parameters validity.
        * It is up to the user to provide a valid ones.
        */

Modified: sandbox/chrono_date/boost/chrono/date/nth_weekday.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/nth_weekday.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/nth_weekday.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -34,7 +34,7 @@
       /**
        * @param n the nth week
        * @param dow the day of the year
- * @Effects: Constructs a pair of nth-weekday.
+ * @Effects Constructs a pair of nth-weekday.
        */
       BOOST_CONSTEXPR nth_weekday(nth_week n, weekday dow, check_t) BOOST_NOEXCEPT
       :
@@ -47,7 +47,7 @@
        * @param n the nth week
        * @param dow the day of the year
        * @param tag to state that no check is performed.
- * @Effects: Constructs a pair of nth-weekday.
+ * @Effects Constructs a pair of nth-weekday.
        * @Note This function doesn't check the parameters validity.
        * It is up to the user to provide a valid ones.
        */
@@ -69,7 +69,7 @@
        * @Return The nth stored component.
        */
       //BOOST_CONSTEXPR nth_week nth_week() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::nth_week() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::nth_week() const BOOST_NOEXCEPT
       {
         return n_;
       }
@@ -77,7 +77,7 @@
        * @Return The weekday stored component.
        */
       //BOOST_CONSTEXPR weekday weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return dow_;
       }

Modified: sandbox/chrono_date/boost/chrono/date/relative_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/relative_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/relative_date.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -115,7 +115,7 @@
 #if BOOST_CHRONO_DATE_REL_DATE_DESIGN == 1 || BOOST_CHRONO_DATE_REL_DATE_DESIGN == 3
       chrono::day to_day() const BOOST_NOEXCEPT
       {
- return chrono::day(d_);
+ return chrono::day(d_, no_check);
       }
       //chrono::day day() const BOOST_NOEXCEPT
       operator chrono::day() const BOOST_NOEXCEPT
@@ -127,7 +127,7 @@
         return chrono::month(m_);
       }
       //chrono::month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT operator chrono::month() const BOOST_NOEXCEPT
       {
         return chrono::month(m_);
       }
@@ -137,7 +137,7 @@
       }
       //chrono::year year() const BOOST_NOEXCEPT
       //BOOST_CONSTEXPR
- BOOST_CHRONO_EXPLICT operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT operator chrono::year() const BOOST_NOEXCEPT
       {
         return chrono::year(y_);
       }
@@ -166,13 +166,13 @@
 #endif
 #if BOOST_CHRONO_DATE_REL_DATE_DESIGN == 1 || BOOST_CHRONO_DATE_REL_DATE_DESIGN == 2
       //chrono::weekday weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return chrono::weekday((x_+1) % weekday::size);
       }
 #elif BOOST_CHRONO_DATE_REL_DATE_DESIGN == 3
       //chrono::weekday weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return chrono::weekday((day_number_from_ymd()+1) % weekday::size);
       }

Modified: sandbox/chrono_date/boost/chrono/date/tuples.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/tuples.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/tuples.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -24,6 +24,161 @@
 {
   namespace chrono
   {
+ namespace unchecked
+ {
+ /**
+ * Class year_month is a tuple-like class of year-month.
+ *
+ * It is CopyConstructible, CopyAssignable, and Destructible.
+ *
+ * In addition to construction and getters it provides the number of days in this year/month.
+ */
+ class year_month
+ {
+ year y_;
+ month m_;
+ public:
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month(year y, month m) BOOST_NOEXCEPT
+ : y_(y),
+ m_(m)
+ {
+ }
+
+ /**
+ * @Return the year stored component.
+ */
+ //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ {
+ return y_;
+ }
+
+ /**
+ * @Return the month stored component.
+ */
+ //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator month() const BOOST_NOEXCEPT
+ {
+ return m_;
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_leap_year() const BOOST_NOEXCEPT
+ {
+ return y_.is_leap();
+ }
+
+ // @todo make it possible to have BOOST_CONSTEXPR days_in
+ /**
+ * @Return the number of days of this month in this year.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::days days_in() const BOOST_NOEXCEPT
+ {
+ return y_.days_in_month(m_);
+ }
+
+ year_month& operator+=(months m) BOOST_NOEXCEPT;
+ BOOST_FORCEINLINE year_month& operator++() BOOST_NOEXCEPT
+ {
+ return *this += months(1);
+ }
+ BOOST_FORCEINLINE year_month operator++(int) BOOST_NOEXCEPT
+ {
+ year_month tmp(*this);
+ ++(*this);
+ return tmp;
+ }
+ BOOST_FORCEINLINE year_month& operator-=(months m) BOOST_NOEXCEPT
+ {
+ return *this += -m;
+ }
+
+ BOOST_FORCEINLINE year_month& operator+=(years y) BOOST_NOEXCEPT
+ {
+ y_ = chrono::year(y_ + y.count());
+ return *this;
+ }
+ BOOST_FORCEINLINE year_month& operator-=(years y) BOOST_NOEXCEPT
+ {
+ return *this += years(-y.count());
+ }
+
+ BOOST_FORCEINLINE year_month& operator--() BOOST_NOEXCEPT
+ {
+ return *this -= months(1);
+ }
+ BOOST_FORCEINLINE year_month operator--(int) BOOST_NOEXCEPT
+ {
+ year_month tmp(*this);
+ --(*this);
+ return tmp;
+ }
+ friend BOOST_FORCEINLINE months operator-(year_month x, year_month y) BOOST_NOEXCEPT;
+
+
+ };
+
+ BOOST_FORCEINLINE year_month operator+(year_month ym, months m) BOOST_NOEXCEPT
+ {
+ ym += m;
+ return ym;
+ }
+ BOOST_FORCEINLINE year_month operator+(months m, year_month ym) BOOST_NOEXCEPT
+ {
+ ym += m;
+ return ym;
+ }
+ BOOST_FORCEINLINE year_month operator-(year_month ym, months m) BOOST_NOEXCEPT
+ {
+ ym -= m;
+ return ym;
+ }
+ BOOST_FORCEINLINE months operator-(year_month x, year_month y) BOOST_NOEXCEPT
+ {
+ int32_t y1 = x.y_;
+ int32_t m1 = x.m_;
+ int32_t y2 = y.y_;
+ int32_t m2 = y.m_;
+ return months(y1*12 + m1 - (y2*12 + m2));
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(year_month ym, years y) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym+y), month(ym));
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(years y, year_month ym) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym+y), month(ym));
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator-(year_month ym, years y) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym-y), month(ym));
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(year y, month m) BOOST_NOEXCEPT
+ {
+ return year_month(y, m);
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(month m, year y) BOOST_NOEXCEPT
+ {
+ return year_month(y, m);
+ }
+ // BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(chrono::year y, int m) BOOST_NOEXCEPT
+ // {
+ // return year_month(y, chrono::month(m));
+ // }
+ // BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(int m, chrono::year y) BOOST_NOEXCEPT
+ // {
+ // return year_month(y, chrono::month(m));
+ // }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(int y, chrono::month m) BOOST_NOEXCEPT
+ {
+ return year_month(chrono::year(y), m);
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(chrono::month m, int y) BOOST_NOEXCEPT
+ {
+ return year_month(chrono::year(y), m);
+ }
+ }
 
     /**
      * Class year_month is a tuple-like class of year-month.
@@ -42,16 +197,12 @@
       m_(m)
       {
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR year_month(year::rep y, month::rep m, check_t) BOOST_NOEXCEPT
- : y_(y, check),
- m_(m, check)
- {
- }
+
       /**
        * @Return the year stored component.
        */
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
@@ -60,7 +211,7 @@
        * @Return the month stored component.
        */
       //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
@@ -74,7 +225,7 @@
       /**
        * @Return the number of days of this month in this year.
        */
- BOOST_FORCEINLINE chrono::days days_in() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::days days_in() const BOOST_NOEXCEPT
       {
         return y_.days_in_month(m_);
       }
@@ -94,31 +245,6 @@
       {
         return *this += -m;
       }
- BOOST_FORCEINLINE year_month& operator--() BOOST_NOEXCEPT
- {
- return *this -= months(1);
- }
- BOOST_FORCEINLINE year_month operator--(int) BOOST_NOEXCEPT
- {
- year_month tmp(*this); --(*this); return tmp;
- }
-
- friend BOOST_FORCEINLINE year_month operator+(year_month ym, months m) BOOST_NOEXCEPT
- {
- ym += m;
- return ym;
- }
- friend BOOST_FORCEINLINE year_month operator+(months m, year_month ym) BOOST_NOEXCEPT
- {
- ym += m;
- return ym;
- }
- friend BOOST_FORCEINLINE year_month operator-(year_month ym, months m) BOOST_NOEXCEPT
- {
- ym -= m;
- return ym;
- }
- friend BOOST_FORCEINLINE months operator-(year_month x, year_month y) BOOST_NOEXCEPT;
 
       BOOST_FORCEINLINE year_month& operator+=(years y) BOOST_NOEXCEPT
       {
@@ -130,21 +256,58 @@
         return *this += years(-y.count());
       }
 
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(year_month ym, years y) BOOST_NOEXCEPT
- {
- return year_month(year(ym+y), month(ym));
- }
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(years y, year_month ym) BOOST_NOEXCEPT
+ BOOST_FORCEINLINE year_month& operator--() BOOST_NOEXCEPT
       {
- return year_month(year(ym+y), month(ym));
+ return *this -= months(1);
       }
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator-(year_month ym, years y) BOOST_NOEXCEPT
+ BOOST_FORCEINLINE year_month operator--(int) BOOST_NOEXCEPT
       {
- return year_month(year(ym-y), month(ym));
+ year_month tmp(*this);
+ --(*this);
+ return tmp;
       }
+ friend BOOST_FORCEINLINE months operator-(year_month x, year_month y) BOOST_NOEXCEPT;
+
 
     };
 
+ BOOST_FORCEINLINE year_month operator+(year_month ym, months m) BOOST_NOEXCEPT
+ {
+ ym += m;
+ return ym;
+ }
+ BOOST_FORCEINLINE year_month operator+(months m, year_month ym) BOOST_NOEXCEPT
+ {
+ ym += m;
+ return ym;
+ }
+ BOOST_FORCEINLINE year_month operator-(year_month ym, months m) BOOST_NOEXCEPT
+ {
+ ym -= m;
+ return ym;
+ }
+ BOOST_FORCEINLINE months operator-(year_month x, year_month y) BOOST_NOEXCEPT
+ {
+ int32_t y1 = x.y_;
+ int32_t m1 = x.m_;
+ int32_t y2 = y.y_;
+ int32_t m2 = y.m_;
+ return months(y1*12 + m1 - (y2*12 + m2));
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(year_month ym, years y) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym+y), month(ym));
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator+(years y, year_month ym) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym+y), month(ym));
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator-(year_month ym, years y) BOOST_NOEXCEPT
+ {
+ return year_month(year(ym-y), month(ym));
+ }
+
     BOOST_FORCEINLINE BOOST_CONSTEXPR year_month operator/(year y, month m) BOOST_NOEXCEPT
     {
       return year_month(y, m);
@@ -186,17 +349,17 @@
       w_(w)
       {
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR year_week(year y, week w, check_t) BOOST_NOEXCEPT
- : y_(y, check),
- w_(w, check)
- {
- }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR year_week(year y, week w, check_t) BOOST_NOEXCEPT
+// : y_(y, check),
+// w_(w, check)
+// {
+// }
 
       /**
        * @Return the year stored component.
        */
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
@@ -204,7 +367,7 @@
        * @Return the week stored component.
        */
       //BOOST_CONSTEXPR chrono::week week() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
       {
         return w_;
       }
@@ -220,7 +383,74 @@
     {
       return year_week(y, w);
     }
+ namespace unchecked
+ {
+ /**
+ * Class month_day is a tuple-like class of month-day.
+ *
+ * It is CopyConstructible, CopyAssignable, and Destructible.
+ *
+ * This class is useful while generating dates, allowing to generate dates
+ * that are quasi literals (e.g. jan_01/2012).
+ */
+ class month_day
+ {
+ month m_;
+ day d_;
+ public:
+ BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month m, day d) BOOST_NOEXCEPT
+ : m_(m),
+ d_(d)
+ {
+ // check validity of day relative to month.
+ }
+
+ /**
+ * @Return the month stored component.
+ */
+ //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator unchecked::month() const BOOST_NOEXCEPT
+ {
+ return m_;
+ }
+ /**
+ * @Return the day stored component.
+ */
+ //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator unchecked::day() const BOOST_NOEXCEPT
+ {
+ return d_;
+ }
+ };
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(month m, day d) BOOST_NOEXCEPT
+ {
+ return month_day(m, d);
+ }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(month m, chrono::day d) BOOST_NOEXCEPT
+// {
+// return month_day(m, d);
+// }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(chrono::month m, day d) BOOST_NOEXCEPT
+// {
+// return month_day(m, d);
+// }
+
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(day d, month m) BOOST_NOEXCEPT
+ {
+ return month_day(m, d);
+ }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(day d, chrono::month m) BOOST_NOEXCEPT
+// {
+// return month_day(m, d);
+// }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR month_day operator/(chrono::day d, month m) BOOST_NOEXCEPT
+// {
+// return month_day(m, d);
+// }
 
+ }
     /**
      * Class month_day is a tuple-like class of month-day.
      *
@@ -240,16 +470,34 @@
       {
         // check validity of day relative to month.
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month::rep m, day::rep d, check_t)BOOST_NOEXCEPT
- : m_(m,check),
- d_(d,check)
+ BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month::rep m, day::rep d, check_t)
+ : m_(m),
+ d_(d)
+ {
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR month_day(month m, day d, no_check_t)BOOST_NOEXCEPT
+ : m_(m),
+ d_(d)
+ {
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR explicit month_day(unchecked::month_day md)
+ : m_(unchecked::month(md)),
+ d_(unchecked::day(md))
+ {
+ }
+
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator unchecked::month_day()
       {
+ return unchecked::month_day(m_, d_);
       }
+
       /**
        * @Return the month stored component.
        */
       //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
@@ -257,7 +505,7 @@
        * @Return the day stored component.
        */
       //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
       {
         return d_;
       }
@@ -275,59 +523,59 @@
     }
 
 
- /**
- * month_day pseudo-literals.
- */
- extern const month_day
- jan_01, jan_02, jan_03, jan_04, jan_05, jan_06, jan_07,
- jan_08, jan_09, jan_10, jan_11, jan_12, jan_13, jan_14,
- jan_15, jan_16, jan_17, jan_18, jan_19, jan_20, jan_21,
- jan_22, jan_23, jan_24, jan_25, jan_26, jan_27, jan_28, jan_29, jan_30, jan_31,
- feb_01, feb_02, feb_03, feb_04, feb_05, feb_06, feb_07,
- feb_08, feb_09, feb_10, feb_11, feb_12, feb_13, feb_14,
- feb_15, feb_16, feb_17, feb_18, feb_19, feb_20, feb_21,
- feb_22, feb_23, feb_24, feb_25, feb_26, feb_27, feb_28, feb_29,
- mar_01, mar_02, mar_03, mar_04, mar_05, mar_06, mar_07,
- mar_08, mar_09, mar_10, mar_11, mar_12, mar_13, mar_14,
- mar_15, mar_16, mar_17, mar_18, mar_19, mar_20, mar_21,
- mar_22, mar_23, mar_24, mar_25, mar_26, mar_27, mar_28, mar_29, mar_30, mar_31,
- apr_01, apr_02, apr_03, apr_04, apr_05, apr_06, apr_07,
- apr_08, apr_09, apr_10, apr_11, apr_12, apr_13, apr_14,
- apr_15, apr_16, apr_17, apr_18, apr_19, apr_20, apr_21,
- apr_22, apr_23, apr_24, apr_25, apr_26, apr_27, apr_28, apr_29, apr_30,
- may_01, may_02, may_03, may_04, may_05, may_06, may_07,
- may_08, may_09, may_10, may_11, may_12, may_13, may_14,
- may_15, may_16, may_17, may_18, may_19, may_20, may_21,
- may_22, may_23, may_24, may_25, may_26, may_27, may_28, may_29, may_30, may_31,
- jun_01, jun_02, jun_03, jun_04, jun_05, jun_06, jun_07,
- jun_08, jun_09, jun_10, jun_11, jun_12, jun_13, jun_14,
- jun_15, jun_16, jun_17, jun_18, jun_19, jun_20, jun_21,
- jun_22, jun_23, jun_24, jun_25, jun_26, jun_27, jun_28, jun_29, jun_30,
- jul_01, jul_02, jul_03, jul_04, jul_05, jul_06, jul_07,
- jul_08, jul_09, jul_10, jul_11, jul_12, jul_13, jul_14,
- jul_15, jul_16, jul_17, jul_18, jul_19, jul_20, jul_21,
- jul_22, jul_23, jul_24, jul_25, jul_26, jul_27, jul_28, jul_29, jul_30, jul_31,
- aug_01, aug_02, aug_03, aug_04, aug_05, aug_06, aug_07,
- aug_08, aug_09, aug_10, aug_11, aug_12, aug_13, aug_14,
- aug_15, aug_16, aug_17, aug_18, aug_19, aug_20, aug_21,
- aug_22, aug_23, aug_24, aug_25, aug_26, aug_27, aug_28, aug_29, aug_30, aug_31,
- sep_01, sep_02, sep_03, sep_04, sep_05, sep_06, sep_07,
- sep_08, sep_09, sep_10, sep_11, sep_12, sep_13, sep_14,
- sep_15, sep_16, sep_17, sep_18, sep_19, sep_20, sep_21,
- sep_22, sep_23, sep_24, sep_25, sep_26, sep_27, sep_28, sep_29, sep_30,
- oct_01, oct_02, oct_03, oct_04, oct_05, oct_06, oct_07,
- oct_08, oct_09, oct_10, oct_11, oct_12, oct_13, oct_14,
- oct_15, oct_16, oct_17, oct_18, oct_19, oct_20, oct_21,
- oct_22, oct_23, oct_24, oct_25, oct_26, oct_27, oct_28, oct_29, oct_30, oct_31,
- nov_01, nov_02, nov_03, nov_04, nov_05, nov_06, nov_07,
- nov_08, nov_09, nov_10, nov_11, nov_12, nov_13, nov_14,
- nov_15, nov_16, nov_17, nov_18, nov_19, nov_20, nov_21,
- nov_22, nov_23, nov_24, nov_25, nov_26, nov_27, nov_28, nov_29, nov_30,
- dec_01, dec_02, dec_03, dec_04, dec_05, dec_06, dec_07,
- dec_08, dec_09, dec_10, dec_11, dec_12, dec_13, dec_14,
- dec_15, dec_16, dec_17, dec_18, dec_19, dec_20, dec_21,
- dec_22, dec_23, dec_24, dec_25, dec_26, dec_27, dec_28, dec_29, dec_30, dec_31
- ;
+// /**
+// * month_day pseudo-literals.
+// */
+// extern const month_day
+// jan_01, jan_02, jan_03, jan_04, jan_05, jan_06, jan_07,
+// jan_08, jan_09, jan_10, jan_11, jan_12, jan_13, jan_14,
+// jan_15, jan_16, jan_17, jan_18, jan_19, jan_20, jan_21,
+// jan_22, jan_23, jan_24, jan_25, jan_26, jan_27, jan_28, jan_29, jan_30, jan_31,
+// feb_01, feb_02, feb_03, feb_04, feb_05, feb_06, feb_07,
+// feb_08, feb_09, feb_10, feb_11, feb_12, feb_13, feb_14,
+// feb_15, feb_16, feb_17, feb_18, feb_19, feb_20, feb_21,
+// feb_22, feb_23, feb_24, feb_25, feb_26, feb_27, feb_28, feb_29,
+// mar_01, mar_02, mar_03, mar_04, mar_05, mar_06, mar_07,
+// mar_08, mar_09, mar_10, mar_11, mar_12, mar_13, mar_14,
+// mar_15, mar_16, mar_17, mar_18, mar_19, mar_20, mar_21,
+// mar_22, mar_23, mar_24, mar_25, mar_26, mar_27, mar_28, mar_29, mar_30, mar_31,
+// apr_01, apr_02, apr_03, apr_04, apr_05, apr_06, apr_07,
+// apr_08, apr_09, apr_10, apr_11, apr_12, apr_13, apr_14,
+// apr_15, apr_16, apr_17, apr_18, apr_19, apr_20, apr_21,
+// apr_22, apr_23, apr_24, apr_25, apr_26, apr_27, apr_28, apr_29, apr_30,
+// may_01, may_02, may_03, may_04, may_05, may_06, may_07,
+// may_08, may_09, may_10, may_11, may_12, may_13, may_14,
+// may_15, may_16, may_17, may_18, may_19, may_20, may_21,
+// may_22, may_23, may_24, may_25, may_26, may_27, may_28, may_29, may_30, may_31,
+// jun_01, jun_02, jun_03, jun_04, jun_05, jun_06, jun_07,
+// jun_08, jun_09, jun_10, jun_11, jun_12, jun_13, jun_14,
+// jun_15, jun_16, jun_17, jun_18, jun_19, jun_20, jun_21,
+// jun_22, jun_23, jun_24, jun_25, jun_26, jun_27, jun_28, jun_29, jun_30,
+// jul_01, jul_02, jul_03, jul_04, jul_05, jul_06, jul_07,
+// jul_08, jul_09, jul_10, jul_11, jul_12, jul_13, jul_14,
+// jul_15, jul_16, jul_17, jul_18, jul_19, jul_20, jul_21,
+// jul_22, jul_23, jul_24, jul_25, jul_26, jul_27, jul_28, jul_29, jul_30, jul_31,
+// aug_01, aug_02, aug_03, aug_04, aug_05, aug_06, aug_07,
+// aug_08, aug_09, aug_10, aug_11, aug_12, aug_13, aug_14,
+// aug_15, aug_16, aug_17, aug_18, aug_19, aug_20, aug_21,
+// aug_22, aug_23, aug_24, aug_25, aug_26, aug_27, aug_28, aug_29, aug_30, aug_31,
+// sep_01, sep_02, sep_03, sep_04, sep_05, sep_06, sep_07,
+// sep_08, sep_09, sep_10, sep_11, sep_12, sep_13, sep_14,
+// sep_15, sep_16, sep_17, sep_18, sep_19, sep_20, sep_21,
+// sep_22, sep_23, sep_24, sep_25, sep_26, sep_27, sep_28, sep_29, sep_30,
+// oct_01, oct_02, oct_03, oct_04, oct_05, oct_06, oct_07,
+// oct_08, oct_09, oct_10, oct_11, oct_12, oct_13, oct_14,
+// oct_15, oct_16, oct_17, oct_18, oct_19, oct_20, oct_21,
+// oct_22, oct_23, oct_24, oct_25, oct_26, oct_27, oct_28, oct_29, oct_30, oct_31,
+// nov_01, nov_02, nov_03, nov_04, nov_05, nov_06, nov_07,
+// nov_08, nov_09, nov_10, nov_11, nov_12, nov_13, nov_14,
+// nov_15, nov_16, nov_17, nov_18, nov_19, nov_20, nov_21,
+// nov_22, nov_23, nov_24, nov_25, nov_26, nov_27, nov_28, nov_29, nov_30,
+// dec_01, dec_02, dec_03, dec_04, dec_05, dec_06, dec_07,
+// dec_08, dec_09, dec_10, dec_11, dec_12, dec_13, dec_14,
+// dec_15, dec_16, dec_17, dec_18, dec_19, dec_20, dec_21,
+// dec_22, dec_23, dec_24, dec_25, dec_26, dec_27, dec_28, dec_29, dec_30, dec_31
+// ;
 
     /**
      * Class week_weekday is a tuple-like class of week-weekday.
@@ -353,12 +601,12 @@
       {
       }
       //BOOST_CONSTEXPR chrono::week week() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
       {
         return w_;
       }
       //BOOST_CONSTEXPR chrono::weekday weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return wd_;
       }
@@ -394,24 +642,24 @@
       {
       }
 
- BOOST_FORCEINLINE BOOST_CONSTEXPR year_month_day(year::rep y, month::rep m, day::rep d, check_t)
- : y_(y, check),
- m_(m, check),
- d_(d, check)
- {
- }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR year_month_day(year::rep y, month::rep m, day::rep d, check_t)
+// : y_(y, check),
+// m_(m, check),
+// d_(d, check)
+// {
+// }
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
       //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
       //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
       {
         return d_;
       }
@@ -452,17 +700,17 @@
       {
       }
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
       //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return m_;
       }
       //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
       {
         return d_;
       }
@@ -492,18 +740,18 @@
       d_(d)
       {
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR year_day_of_year(year::rep y, day_of_year::rep d, check_t)
- : y_(y, check),
- d_(d, check)
- {
- }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR year_day_of_year(year::rep y, day_of_year::rep d, check_t)
+// : y_(y, check),
+// d_(d, check)
+// {
+// }
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
       //BOOST_CONSTEXPR chrono::day_of_year day_of_year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day_of_year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::day_of_year() const BOOST_NOEXCEPT
       {
         return d_;
       }
@@ -535,24 +783,24 @@
       {
       }
 
- BOOST_FORCEINLINE BOOST_CONSTEXPR year_week_weekday(year::rep y, week::rep w, weekday::rep wd, check_t)
- : y_(y, check),
- w_(w, check),
- wd_(wd, check)
- {
- }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR year_week_weekday(year::rep y, week::rep w, weekday::rep wd, check_t)
+// : y_(y, check),
+// w_(w, check),
+// wd_(wd, check)
+// {
+// }
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return y_;
       }
       //BOOST_CONSTEXPR chrono::week week() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::week() const BOOST_NOEXCEPT
       {
         return w_;
       }
       //BOOST_CONSTEXPR chrono::weekday weekday() const BOOST_NOEXCEPT
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::weekday() const BOOST_NOEXCEPT
       {
         return wd_;
       }

Modified: sandbox/chrono_date/boost/chrono/date/ydoy_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/ydoy_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/ydoy_date.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -154,7 +154,7 @@
 
 
 // /**
-// * @Effects: tp is converted to UTC, and then trucated to 00:00:00 hours.
+// * @Effects tp is converted to UTC, and then trucated to 00:00:00 hours.
 // * A ydoy_date is created which reflects this point in time.
 // * @Throws If the conversion from tp overflows the range of ydoy_date, throws
 // * an exception of type bad_date.
@@ -165,7 +165,7 @@
 // * @Returns: A system_clock::time_point which represents the ydoy_date
 // * referred to by *this at 00:00:00 UTC.
 // *
-// * @Throws: If the conversion to tp overflows the range of
+// * @Throws If the conversion to tp overflows the range of
 // * system_clock::time_point, throws an exception of type bad_date.
 // *
 // */
@@ -205,7 +205,7 @@
        *
        * @Returns a @c days_date representing the same date.
        */
- //BOOST_CHRONO_EXPLICT
+ //BOOST_CHRONO_EXPLICIT
       BOOST_FORCEINLINE operator days_date() const
       {
         year::rep by = y_ + 32799;
@@ -237,7 +237,7 @@
        *
        * @Returns a @c ymd_date representing the same date.
        */
- BOOST_CHRONO_EXPLICT BOOST_FORCEINLINE operator ymd_date() const
+ BOOST_CHRONO_EXPLICIT BOOST_FORCEINLINE operator ymd_date() const
       {
         //return days_date(chrono::year(y_), day_of_year(doy_));
         return ymd_date(to_days_date(*this));
@@ -294,13 +294,13 @@
        * @Returns: chrono::year(y_).
        */
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_FORCEINLINE BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return chrono::year(y_);
       }
       BOOST_FORCEINLINE chrono::month_day month_day() const BOOST_NOEXCEPT
       {
- return chrono::month_day(chrono::month(day_of_year_month(leap_,doy_)), chrono::day(day_of_year_day_of_month(leap_,doy_)));
+ return chrono::month_day(chrono::month(day_of_year_month(leap_,doy_)), chrono::day(day_of_year_day_of_month(leap_,doy_), no_check));
       }
       BOOST_FORCEINLINE chrono::year_month year_month() const BOOST_NOEXCEPT
       {
@@ -336,16 +336,16 @@
 
 
 // /**
-// * @Effects: Adds d.count() days to the current ydoy_date.
+// * @Effects Adds d.count() days to the current ydoy_date.
 // * @Returns: *this.
-// * @Throws: If the addition would create a ydoy_date with a y_ outside of the
+// * @Throws If the addition would create a ydoy_date with a y_ outside of the
 // * range of year, throws an exception of type bad_date.
 // *
 // */
 // ydoy_date& operator+=(days d);
 //
 // /**
-// * @Effects: *this += days(1).
+// * @Effects *this += days(1).
 // * @Returns: *this.
 // */
 // ydoy_date& operator++()
@@ -353,7 +353,7 @@
 // return *this += days(1);
 // }
 // /**
-// * @Effects: *this += days(1).
+// * @Effects *this += days(1).
 // * @Returns: A copy of *this prior to the increment.
 // */
 // ydoy_date operator++(int)
@@ -363,7 +363,7 @@
 // return tmp;
 // }
 // /**
-// * @Effects: *this += -d.
+// * @Effects *this += -d.
 // * @Returns: *this.
 // */
 // ydoy_date& operator-=(days d)
@@ -371,7 +371,7 @@
 // return *this += -d;
 // }
 // /**
-// * @Effects: *this -= days(1).
+// * @Effects *this -= days(1).
 // * @Returns: *this.
 // */
 // ydoy_date& operator--()
@@ -379,7 +379,7 @@
 // return *this -= days(1);
 // }
 // /**
-// * @Effects: *this -= days(1).
+// * @Effects *this -= days(1).
 // * @Returns: A copy of *this prior to the increment.
 // */
 // ydoy_date operator--(int)
@@ -441,7 +441,7 @@
 // *
 // * @Returns: *this.
 // *
-// * @Throws: If the addition would create a ydoy_date with a y_ outside of the
+// * @Throws If the addition would create a ydoy_date with a y_ outside of the
 // * range of year, or a doy_ outside the range for the newly computed y_,
 // * throws an exception of type bad_date.
 // *
@@ -485,12 +485,12 @@
 // }
 //
 // /**
-// * @Effects: Adds y.count() years to the current ydoy_date.
+// * @Effects Adds y.count() years to the current ydoy_date.
 // * This is accomplished as if by storing temporary values of the ydoy_date's
 // * y_, doy_. Computing a new value for y_. And then assigning to *this
 // * a new ydoy_date constructed from the newly computed y_, and the original doy_.
 // * @Returns: *this.
-// * @Throws: If the addition would create a ydoy_date with a y_ outside of the
+// * @Throws If the addition would create a ydoy_date with a y_ outside of the
 // * range of year, or a doy_ outside the range for the newly computed y_,
 // * throws an exception of type bad_date.
 // */

Modified: sandbox/chrono_date/boost/chrono/date/year.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/year.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/year.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -39,25 +39,26 @@
       typedef bounded<year_tag, -32768, 32767, year_rep> base_type;
     public:
       /**
- * @Effects: Constructs an object of class year by storing y.
- * @Postconditions: static_cast<int>(*this) == y.
+ * @Effects Constructs an object of class year by storing y.
+ * @Postconditions <c>static_cast<rep>(*this) == y</c>.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR explicit year(int v) :
         base_type(v)
       {
       }
 
- /**
- * @Effects: Constructs an object of class year by storing y.
- * @Postconditions: static_cast<int>(*this) == y.
- * @Throws: if y is outside of the supported range, throws an exception of type bad_date.
- */
- BOOST_FORCEINLINE BOOST_CONSTEXPR year(int y, check_t) BOOST_NOEXCEPT
- : base_type(y, check)
- {}
+// /**
+// * @Effects Constructs an object of class year by storing y.
+// * @Postconditions static_cast<int>(*this) == y.
+// * @Throws if y is outside of the supported range, throws an exception of type bad_date.
+// */
+// BOOST_FORCEINLINE BOOST_CONSTEXPR year(int y, check_t) BOOST_NOEXCEPT
+// : base_type(y, check)
+// {}
 
       /**
- * @Return the number of days of this year.
+ * @Returns the number of days of this year.
+ *
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR days days_in() const BOOST_NOEXCEPT
       {
@@ -65,15 +66,21 @@
       }
 
       /**
- * @Return the number of days of the month parameter in this year.
+ * @Returns the number of days of the month @m parameter in this year.
        */
- BOOST_FORCEINLINE days days_in_month(month m) const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR days days_in_month(month m) const BOOST_NOEXCEPT
+ {
+ return m.days_in(is_leap());
+ }
+ /**
+ * @Returns the number of days of the month @m parameter in this year.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR days days_in_month(unchecked::month m) const BOOST_NOEXCEPT
       {
         return m.days_in(is_leap());
       }
-
       /**
- * @Return the number of days since the epoch until the fist day of this year.
+ * @Returns the number of days since the epoch until the fist day of this year.
        */
       BOOST_FORCEINLINE days days_since_epoch() const BOOST_NOEXCEPT
       {
@@ -81,7 +88,7 @@
       }
 
       /**
- * @Return whether this year is leap or not.
+ * @Returns whether this year is leap or not.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_leap() const BOOST_NOEXCEPT
       {

Modified: sandbox/chrono_date/boost/chrono/date/ymd_date.hpp
==============================================================================
--- sandbox/chrono_date/boost/chrono/date/ymd_date.hpp (original)
+++ sandbox/chrono_date/boost/chrono/date/ymd_date.hpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -34,21 +34,610 @@
   namespace chrono
   {
 
- namespace chrono_detail
+ namespace unchecked
     {
-#ifndef BOOST_NO_CXX11_CONSTEXPR
- BOOST_STATIC_CONSTEXPR day::rep max_days_in_month_[13] =
- { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- BOOST_FORCEINLINE static BOOST_CONSTEXPR
- day::rep max_days_in_month(int d) { return max_days_in_month_[d]; }
-#else
- extern day::rep max_days_in_month_[];
- BOOST_FORCEINLINE static
- day::rep max_days_in_month(int d) { return max_days_in_month_[d]; }
+ class ymd_date
+ {
 
-#endif
+ // // Store x, y/m/d, leap. Total 64 bits
+ // int_least16_t y_;
+ //
+ // uint_least8_t m_ ; //:4;
+ // //int_least16_t reserved1_ :4;
+ //
+ // uint_least8_t d_ :5;
+ // uint_least8_t leap_ :1;
+ // //uint_least8_t reserved2_ :2;
+
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ #if defined __clang__
+ int_least32_t y_;
+ int_least16_t m_;
+ int_least16_t d_;
+ #else
+ int_least16_t y_;
+ int_least8_t m_;
+ int_least8_t d_;
+ #endif
+ bool leap_ ;
+ #else
+ int_least32_t y_;
+ int_least16_t m_;
+ int_least16_t d_;
+ #endif
+
+ public:
+ #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
+ private:
+
+ /**
+ * Check the validity between the parameters not that the parameters are them self valid.
+ */
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ bool is_valid_(year y, month m, day d)
+ {
+ return (m != 2)
+ ? ( d <= chrono_detail::leap_days_in_month(m)
+ ? true
+ : false
+ )
+ : ( y.is_leap()
+ ? ( d <= 29
+ ? true
+ : false
+ )
+ : ( d <= 28
+ ? true
+ : false
+ )
+ );
+ }
+
+ #endif
+
+ public:
+
+ /**
+ * @Effect Constructs a @c ymd_date constructor from @c year, @c month, @c day stored in the arguments as follows:
+ * Constructs a ymd_date so that <c>year() == y && month() = m && day() == d</c>.
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, unchecked::month m, unchecked::day d) BOOST_NOEXCEPT :
+ y_(y),
+ m_(m),
+ d_(d)
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ , leap_(boost::chrono::is_leap(y_))
+ #endif
+ {
+ }
+
+ /**
+ * @Effect Constructs a ymd_date using the year, month_day stored in the arguments as follows:
+ * Constructs a ymd_date for which year() == y, month() == month(md), day() == month(md).
+ * @Note This constructor can be more efficient as the month_day is already valid.
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, month_day md) BOOST_NOEXCEPT:
+ y_(y),
+ m_(month(md)),
+ d_(day(md))
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ , leap_(y.is_leap())
+ #endif
+ {
+ }
+
+ /**
+ * Unchecked constructor from days+ymd+leap
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(days::rep, year::rep y, month::rep m, day::rep d, bool leap) BOOST_NOEXCEPT
+ :
+ y_(y),
+ m_(m),
+ d_(d)
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ , leap_(leap)
+ #endif
+ {
+ }
+ /**
+ * Unchecked constructor from ymd+leap
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(year::rep y, month::rep m, day::rep d, bool leap) BOOST_NOEXCEPT
+ : y_(y),
+ m_(m),
+ d_(d)
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ , leap_(leap)
+ #endif
+ {
+ }
+
+ /**
+ * @Effects Update the ymd_date if the parameters represents a valid ymd_date.
+ * @Returns true if the parameters represents a valid ymd_date.
+ */
+ bool set_if_valid_date(chrono::year y, month m, day d) BOOST_NOEXCEPT;
+ /**
+ * @Effects Update the ymd_date if the parameters represents a valid ymd_date.
+ * @Returns true if the parameters represents a valid ymd_date.
+ */
+ bool set_if_valid_date(chrono::year y, day_of_year doy) BOOST_NOEXCEPT;
+
+ /**
+ * @Effects Update the ymd_date if the parameters represents a valid ymd_date.
+ * @Returns true if the parameters represents a valid ymd_date.
+ */
+ bool set_if_valid_date(days d) BOOST_NOEXCEPT;
+
+ /**
+ * @Return A ymd_date which represents the current day taking the local time zone into account.
+ */
+ static ymd_date today() BOOST_NOEXCEPT;
+
+ /**
+ * Effects: Constructs a ymd_date as if by year(0)/jan/1.
+ * Note: the purpose of this constructor is to have a very efficient means
+ * of ymd_date construction when the specific value for that ymd_date is unimportant.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR ymd_date() BOOST_NOEXCEPT
+ :
+ y_(0),
+ m_(1),
+ d_(1)
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ , leap_(true)
+ #endif
+ {
+ }
+ /**
+ * @Effects @c tp is converted to UTC, and then truncated to 00:00:00 hours.
+ * A ymd_date is created which reflects this point in time.
+ * @Throws If the conversion from @c tp overflows the range of @c ymd_date, throws
+ * an exception of type @c bad_date.
+ *
+ */
+ explicit ymd_date(system_clock::time_point tp);
+ /**
+ * @Returns A @c system_clock::time_point which represents the @c ymd_date
+ * referred to by @c *this at 00:00:00 UTC.
+ *
+ * @Throws If the conversion to @c tp overflows the range of
+ * @c system_clock::time_point, throws an exception of type @c bad_date.
+ *
+ * @Notes Provided only of explicit conversion is supported (See @c to_date_clock_time_point()).
+ */
+ BOOST_CHRONO_EXPLICIT operator system_clock::time_point () const;
+
+ /**
+ *
+ * @Returns whether the @c year()/month()/day() is a valid proleptic Gregorian date.
+ */
+ // @todo BOOST_CONSTEXPR
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
+ {
+ return month(m_).is_valid() && day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_));
+ }
+
+ /**
+ * Conversion from @c days_date
+ */
+ explicit ymd_date(days_date dt);
+ /**
+ * Conversion from @c days
+ */
+ explicit ymd_date(days d);
+
+ /**
+ * Conversion to @c days_date
+ */
+ //BOOST_CHRONO_EXPLICIT
+ BOOST_FORCEINLINE operator days_date() const BOOST_NOEXCEPT
+ {
+ return days_date(days(day_number_from_ymd()));
+ }
+
+ /**
+ * @Returns @c chrono::day(d_).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR unchecked::day to_day() const BOOST_NOEXCEPT
+ {
+ return unchecked::day(d_);
+ }
+ /**
+ * @Returns @c chrono::day(d_).
+ */
+ //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator unchecked::day() const BOOST_NOEXCEPT
+ {
+ return unchecked::day(d_);
+ }
+ /**
+ * @Returns @c chrono::month(m_).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR unchecked::month to_month() const BOOST_NOEXCEPT
+ {
+ return unchecked::month(m_);
+ }
+ /**
+ * @Returns @c chrono::month(m_).
+ */
+ //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator unchecked::month() const BOOST_NOEXCEPT
+ {
+ return unchecked::month(m_);
+ }
+ /**
+ * @Returns @c chrono::year(y_).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::year to_year() const BOOST_NOEXCEPT
+ {
+ return chrono::year(y_);
+ }
+ /**
+ * @Returns @c chrono::year(y_).
+ */
+ //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ {
+ return chrono::year(y_);
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator month_day() const BOOST_NOEXCEPT
+ {
+ return month_day(month(m_), day(d_));
+ }
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator year_month() const BOOST_NOEXCEPT
+ {
+ return year_month(year(y_),month(m_));
+ }
+// BOOST_FORCEINLINE BOOST_CONSTEXPR operator year_month_day() const BOOST_NOEXCEPT
+// {
+// return year_month_day(year(y_),month(m_),day(d_));
+// }
+ /**
+ * @Returns whether year() is a leap year.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_leap_year() const BOOST_NOEXCEPT
+ {
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ return leap_;
+ #else
+ return is_leap(y_);
+ #endif
+ }
+
+ /**
+ * @Returns A weekday constructed with an int corresponding to *this
+ * ymd_date's day of the week (a value in the range of [0 - 6], 0 is Sunday).
+ *
+ * @Notes this function needs a conversion to @c days_date, so maybe you would do better to not use it.
+ *
+ */
+ BOOST_FORCEINLINE chrono::weekday to_weekday() const BOOST_NOEXCEPT
+ {
+ return chrono::weekday((day_number_from_ymd()+1) % chrono::weekday::size);
+ }
+
+ // /**
+ // * @Effects Adds d.count() days to the current ymd_date.
+ // * @Returns *this.
+ // * @Throws If the addition would create a ymd_date with a y_ outside of the
+ // * range of year, throws an exception of type bad_date.
+ // *
+ // */
+ // ymd_date& operator+=(days d);
+ //
+ // /**
+ // * @Effects *this += days(1).
+ // * @Returns *this.
+ // */
+ // ymd_date& operator++()
+ // {
+ // return *this += days(1);
+ // }
+ // /**
+ // * @Effects *this += days(1).
+ // * @Returns A copy of *this prior to the increment.
+ // */
+ // ymd_date operator++(int)
+ // {
+ // ymd_date tmp(*this);
+ // ++(*this);
+ // return tmp;
+ // }
+ // /**
+ // * @Effects *this += -d.
+ // * @Returns *this.
+ // */
+ // ymd_date& operator-=(days d)
+ // {
+ // return *this += -d;
+ // }
+ // /**
+ // * @Effects *this -= days(1).
+ // * @Returns *this.
+ // */
+ // ymd_date& operator--()
+ // {
+ // return *this -= days(1);
+ // }
+ // /**
+ // * @Effects *this -= days(1).
+ // * @Returns A copy of *this prior to the increment.
+ // */
+ // ymd_date operator--(int)
+ // {
+ // ymd_date tmp(*this); --(*this); return tmp;
+ // }
+ //
+ // /**
+ // * @Returns dt += d.
+ // *
+ // */
+ // friend ymd_date operator+(ymd_date dt, days d)
+ // {
+ // dt += d;
+ // return dt;
+ // }
+ // /**
+ // * @Returns dt += d.
+ // *
+ // */
+ // friend ymd_date operator+(days d, ymd_date dt)
+ // {
+ // dt += d;
+ // return dt;
+ // }
+ // /**
+ // * @Returns dt -= d.
+ // *
+ // */
+ // friend ymd_date operator-(ymd_date dt, days d)
+ // {
+ // dt -= d;
+ // return dt;
+ // }
+ // /**
+ // * @Returns Computes the number of days x is ahead of y in the calendar,
+ // * and returns that signed integral number n as days(n).
+ // */
+ // friend days operator-(ymd_date x, ymd_date y) BOOST_NOEXCEPT
+ // {
+ // return days(x.days_since_epoch() - y.days_since_epoch());
+ // }
+ // friend days operator-(days_date x, ymd_date y) BOOST_NOEXCEPT
+ // {
+ // return days(x.days_since_epoch() - y.days_since_epoch());
+ // }
+ // friend days operator-(ymd_date x, days_date y) BOOST_NOEXCEPT
+ // {
+ // return days(x.days_since_epoch() - y.days_since_epoch());
+ // }
+
+ /**
+ * @Effects Adds m.count() months to the current ymd_date.
+ * This is accomplished as if by storing temporary values of the ymd_date's y_, m_, d_.
+ * Computing new values for y_ and m_ based on m. And then assigning to
+ * *this a new ymd_date constructed from the newly computed y_ and m_, and the
+ * original d_.
+ *
+ * @Note Thus for example if a ymd_date is constructed as the second Sunday
+ * in May, adding two months to this ymd_date results in the second Sunday
+ * in July.
+ *
+ * @Returns *this.
+ *
+ * @Throws If the addition would create a ymd_date with a y_ outside of the
+ * range of year, or a d_ outside the range for the newly computed y_/m_,
+ * throws an exception of type bad_date.
+ *
+ */
+ ymd_date& operator+=(months m);
+
+ /**
+ * @Returns *this += -m.
+ */
+ ymd_date& operator-=(months m)
+ {
+ return *this += months(-m.count());
+ }
+
+ /*
+ * @Effects Adds y.count() years to the current ymd_date.
+ * This is accomplished as if by storing temporary values of the ymd_date's
+ * y_, m_, d_. Computing a new value for y_. And then assigning to *this
+ * a new ymd_date constructed from the newly computed y_, and the original m_, d_.
+ * @Note: Thus for example if a ymd_date is constructed as the second Sunday
+ * in May 2011, adding two years to this ymd_date results in the second Sunday
+ * in May 2013.
+ * @Returns *this.
+ * @Throws If the addition would create a ymd_date with a y_ outside of the
+ * range of year, or a d_ outside the range for the newly computed y_/m_,
+ * throws an exception of type bad_date.
+ */
+ ymd_date& operator+=(years y);
+
+ /**
+ * @Returns *this += -y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date& operator-=(years y)
+ {
+ return *this += years(-y.count());
+ }
+
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
+
+ #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
+ private:
+
+ days::rep day_number_from_ymd() const BOOST_NOEXCEPT;
+ #endif
+
+ };
+
+ /**
+ * @Returns dt += m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, months m)
+ {
+ dt += m;
+ return dt;
+ }
+ /**
+ * @Returns dt += m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(months m, ymd_date dt)
+ {
+ dt += m;
+ return dt;
+ }
+ /**
+ * @Returns dt += -m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, months m)
+ {
+ dt -= m;
+ return dt;
+ }
+ /**
+ * @Returns dt += y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, years y)
+ {
+ dt += y;
+ return dt;
+ }
+ /**
+ * @Returns dt += y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(years y, ymd_date dt)
+ {
+ dt += y;
+ return dt;
+ }
+ /**
+ * @Returns dt -= y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, years y)
+ {
+ dt -= y;
+ return dt;
+ }
+
+ /**
+ * @Returns x.year() == y.year() && x.month() == y.month() && x.day() == y.day()
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return x.y_ == y.y_ && x.m_ == y.m_ && x.d_ == y.d_;
+ }
+ /**
+ * @Returns x.year_month_day() < y.year_month_day() in lexicographic order.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return x.y_ < y.y_ ||
+ (!(y.y_ < x.y_) && (x.m_ < y.m_ ||
+ (!(y.m_ < x.m_) && x.d_ < y.d_)));
+ }
+
+ /**
+ * @Returns !(x == y).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator!=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(x == y);
+ }
+ /**
+ * @Returns y < x.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator> (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return y < x;
+ }
+ /**
+ * @Returns !(y < x).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator<=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(y < x);
+ }
+ /**
+ * @Returns !(x < y).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator>=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(x < y);
+ }
+ /**
+ * @c ymd_date factory.
+ * @Returns @c ymd_date(y,month(md),day(md))
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date operator/(month_day md, year y)
+ {
+ return ymd_date(y, month(md), day(md));
+ }
+ /**
+ * @c ymd_date factory.
+ * @Returns @c ymd_date(year(ym),month(ym),d)
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date operator/(year_month ym, day d)
+ {
+ return ymd_date(year(ym), month(ym), d);
+ }
+ /**
+ * @c ymd_date factory.
+ * @Returns @c ym/day(d)
+ */
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date operator/(year_month ym, int d)
+ {
+ return ym / day(d);
+ }
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y,month m, day d)
+ {
+ return ymd_date(y, m, d);
+ }
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y,month m, int d)
+ {
+ return ymd_date(y, m, day(d));
+ }
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y,int m, day d)
+ {
+ return ymd_date(y, month(m), d);
+ }
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(int y,month m, day d)
+ {
+ return ymd_date(year(y), m, d);
+ }
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year_month ym, day d)
+ {
+ return ymd_date(year(ym), month(ym), d);
+ }
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year_month ym, int d)
+ {
+ return ymd_date(year(ym), month(ym), day(d));
+ }
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y, month_day md)
+ {
+ return ymd_date(y, md);
+ }
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(int y, month_day md)
+ {
+ return ymd_date(year(y), md);
+ }
+
+ } // unchecked
 
- }
     /**
      * The class @c ymd_date is a model of Date storing
      * - the @c year,
@@ -72,11 +661,6 @@
 // uint_least8_t leap_ :1;
 // //uint_least8_t reserved2_ :2;
 
-// int_least16_t y_;
-// uint_least8_t m_ ; //:4;
-// uint_least8_t d_ ;
-// bool leap_ ;
-
 #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
 #if defined __clang__
       int_least32_t y_;
@@ -105,7 +689,7 @@
       bool is_valid_(year y, month m, day d)
       {
           return (m != 2)
- ? ( d <= chrono_detail::max_days_in_month(m)
+ ? ( d <= chrono_detail::leap_days_in_month(m)
                   ? true
                   : false
                 )
@@ -120,6 +704,9 @@
                   )
                 );
       }
+ /**
+ * Check the validity between the parameters not that the parameters are them self valid.
+ */
       BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
       bool is_valid_(year y, month_day md)
       {
@@ -128,6 +715,15 @@
               : false;
       }
 
+ /**
+ * Check the validity between the parameters not that the parameters are them self valid.
+ */
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ bool is_valid_(year_month ym, day d)
+ {
+ return d < ym.days_in().count();
+ }
+
 #ifndef BOOST_NO_CXX11_CONSTEXPR
       BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
       day check_invariants(year y, month m, day d)
@@ -147,6 +743,15 @@
                 ;
       }
 
+ BOOST_FORCEINLINE static BOOST_CHRONO_DATE_CONSTEXPR
+ day check_invariants(year_month ym, day d)
+ {
+ return is_valid_(ym,d)
+ ? d
+ : throw bad_date("day " + to_string(d) + " is out of range for " + to_string(year(ym)) + '/' + to_string(month(ym)))
+ ;
+ }
+
 #else
       BOOST_FORCEINLINE static
       day check_invariants(year y, month m, day d)
@@ -163,56 +768,36 @@
               return day(md);
           else throw bad_date("day " + to_string(day(md)) + " is out of range for " + to_string(y) + '/' + to_string(month(md)));
       }
+ BOOST_FORCEINLINE static
+ day check_invariants(year_month ym, day d)
+ {
+ if ( is_valid_(ym,d) )
+ return d;
+ else throw bad_date("day " + to_string(d) + " is out of range for " + to_string(year(ym)) + '/' + to_string(month(ym)));
+ }
 #endif
 
-
-
-
-
 #endif
- /**
- * @Effect Constructs a @c ymd_date using the @c year, @c month, @c day stored in the arguments as follows:
- * If the value stored in @c d is outside the range of valid dates for this month @c m and year @c y,
- * throws an exception of type @c bad_date.
- * Else constructs a @c ymd_date for which <c>year() == y && month() == m && day() == d</c>.
- * @Throws @c bad_date if the specified @c ymd_date is invalid.
- */
     public:
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, chrono::month m, chrono::day d, check_t):
- y_(y),
- m_(m),
- d_(check_invariants(y, m, d))
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR explicit ymd_date(unchecked::ymd_date ymd)
+ : y_(year(ymd)),
+ m_(month(unchecked::month(ymd), no_check)),
+ d_(check_invariants(
+ year(ymd),
+ month(unchecked::month(ymd)),
+ day(unchecked::day(ymd))
+ )
+ )
 #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
+ , leap_(ymd.is_leap_year())
 #endif
       {
       }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(int y, chrono::month m, chrono::day d, check_t):
- y_(y),
- m_(m),
- d_(check_invariants(year(y), m, d))
- #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
- #endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, int m, chrono::day d, check_t):
- y_(y),
- m_(m),
- d_(check_invariants(y, month(m), d))
- #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
- #endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, chrono::month m, int d, check_t):
- y_(y),
- m_(m),
- d_(check_invariants(y, m, day(d)))
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
+
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR operator unchecked::ymd_date() BOOST_NOEXCEPT
       {
+ return unchecked::ymd_date(year(y_), unchecked::month(m_), unchecked::day(d_));
       }
 
       /**
@@ -221,144 +806,42 @@
        */
     public:
 
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, chrono::month m, chrono::day d) BOOST_NOEXCEPT :
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, chrono::month m, chrono::day d) :
         y_(y),
         m_(m),
- d_(d)
+ d_(check_invariants(year(y), m, d))
 #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
         , leap_(boost::chrono::is_leap(y_))
 #endif
       {
       }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(int y, chrono::month m, chrono::day d) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, int m, chrono::day d) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, chrono::month m, int d) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
 
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::month m, chrono::day d, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::month m, chrono::day d, int y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::month m, int d, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(int m, chrono::day d, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::day d, chrono::month m, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::day d, chrono::month m, int y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::day d, int m, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(int d, chrono::month m, chrono::year y) BOOST_NOEXCEPT :
- y_(y),
- m_(m),
- d_(d)
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(boost::chrono::is_leap(y_))
-#endif
- {
- }
       /**
        * @Effect Constructs a ymd_date using the year, month_day stored in the arguments as follows:
- * If the value stored in md is outside the range of valid dates for this year y,
- * throws an exception of type bad_date.
- * Else constructs a ymd_date for which year(*this) == y, month(*this) == month(md), day(*this) == day(md).
- *
- * @Throws bad_date if the specified ymd_date is invalid.
+ * Constructs a ymd_date for which year() == y, month() == month(md), day() == month(md).
        * @Note This constructor can be more efficient as the month_day is already valid.
        */
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, month_day md, check_t):
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, month_day md) :
       y_(y),
       m_(month(md)),
       d_(check_invariants(y, md))
-#if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
       , leap_(y.is_leap())
-#endif
- {
- }
+ #endif
+ {
+ }
+
       /**
        * @Effect Constructs a ymd_date using the year, month_day stored in the arguments as follows:
        * Constructs a ymd_date for which year() == y, month() == month(md), day() == month(md).
        * @Note This constructor can be more efficient as the month_day is already valid.
        */
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year y, month_day md) BOOST_NOEXCEPT:
- y_(y),
- m_(month(md)),
- d_(day(md))
+ BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date(chrono::year_month ym, day d):
+ y_(year(ym)),
+ m_(month(ym)),
+ d_(check_invariants(ym, d))
       #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
- , leap_(y.is_leap())
+ , leap_(is_leap(y_))
       #endif
           {
           }
@@ -453,47 +936,47 @@
       {
       }
       /**
- * @Effects: tp is converted to UTC, and then trucated to 00:00:00 hours.
+ * @Effects @c tp is converted to UTC, and then truncated to 00:00:00 hours.
        * A ymd_date is created which reflects this point in time.
- * @Throws If the conversion from tp overflows the range of ymd_date, throws
- * an exception of type bad_date.
+ * @Throws If the conversion from @c tp overflows the range of @c ymd_date, throws
+ * an exception of type @c bad_date.
        *
        */
       explicit ymd_date(system_clock::time_point tp);
       /**
- * @Returns: A system_clock::time_point which represents the ymd_date
- * referred to by *this at 00:00:00 UTC.
+ * @Returns A @c system_clock::time_point which represents the @c ymd_date
+ * referred to by @c *this at 00:00:00 UTC.
        *
- * @Throws: If the conversion to tp overflows the range of
- * system_clock::time_point, throws an exception of type bad_date.
+ * @Throws If the conversion to @c tp overflows the range of
+ * @c system_clock::time_point, throws an exception of type @c bad_date.
        *
        * @Notes Provided only of explicit conversion is supported (See @c to_date_clock_time_point()).
        */
- BOOST_CHRONO_EXPLICT operator system_clock::time_point () const;
+ BOOST_CHRONO_EXPLICIT operator system_clock::time_point () const;
 // /**
-// * @Returns: A system_clock::time_point which represents the ymd_date
-// * referred to by *this at 00:00:00 UTC.
+// * @Returns A @c system_clock::time_point which represents the @c ymd_date
+// * referred to by @c *this at 00:00:00 UTC.
 // *
-// * @Throws: If the conversion to tp overflows the range of
-// * system_clock::time_point, throws an exception of type bad_date.
+// * @Throws If the conversion to @c tp overflows the range of
+// * @c system_clock::time_point, throws an exception of type @c bad_date.
 // *
 // */
 // system_clock::time_point to_date_clock_time_point() const { return system_clock::time_point(*this); }
 
       /**
        *
- * @Returns whether the year()/month()/day() is a valid proleptic Gregorian date.
+ * @Returns whether the @c year()/month()/day() is a valid proleptic Gregorian date.
        */
       // @todo BOOST_CONSTEXPR
       BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR bool is_valid() const BOOST_NOEXCEPT
       {
- return month(m_).is_valid() && day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_));
+ return month(m_).is_valid() && unchecked::day(d_).is_valid() && is_valid_(year(y_), month(m_), day(d_, no_check));
       }
 
 //#if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
 // private:
 // /*
-// * @Returns: the number of days since an undefined epoch.
+// * @Returns the number of days since an undefined epoch.
 // */
 // days days_since_epoch() const
 // {
@@ -502,13 +985,13 @@
 //#endif
 // private:
 // /*
-// * @Returns: the number of days since an undefined epoch.
+// * @Returns the number of days since an undefined epoch.
 // */
 // days to_days() const
 // {
 // return days(day_number_from_ymd());
 // }
- public:
+// public:
 
       /**
        * Conversion from @c days_date
@@ -522,71 +1005,71 @@
       /**
        * Conversion to @c days_date
        */
- //BOOST_CHRONO_EXPLICT
+ //BOOST_CHRONO_EXPLICIT
       BOOST_FORCEINLINE operator days_date() const BOOST_NOEXCEPT
       {
         return days_date(days(day_number_from_ymd()));
       }
 
       /**
- * Returns: chrono::day(d_).
+ * @Returns @c chrono::day(d_).
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::day to_day() const BOOST_NOEXCEPT
       {
- return chrono::day(d_);
+ return chrono::day(d_, no_check);
       }
       /**
- * Returns: chrono::day(d_).
+ * @Returns @c chrono::day(d_).
        */
       //BOOST_CONSTEXPR chrono::day day() const BOOST_NOEXCEPT
- BOOST_FORCEINLINE BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::day() const BOOST_NOEXCEPT
       {
- return chrono::day(d_);
+ return chrono::day(d_, no_check);
       }
       /**
- * Returns: chrono::month(m_).
+ * @Returns @c chrono::month(m_).
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::month to_month() const BOOST_NOEXCEPT
       {
         return chrono::month(m_);
       }
       /**
- * Returns: chrono::month(m_).
+ * @Returns @c chrono::month(m_).
        */
       //BOOST_CONSTEXPR chrono::month month() const BOOST_NOEXCEPT
- BOOST_FORCEINLINE BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::month() const BOOST_NOEXCEPT
       {
         return chrono::month(m_);
       }
       /**
- * Returns: chrono::year(y_).
+ * @Returns @c chrono::year(y_).
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::year to_year() const BOOST_NOEXCEPT
       {
         return chrono::year(y_);
       }
       /**
- * Returns: chrono::year(y_).
+ * @Returns @c chrono::year(y_).
        */
       //BOOST_CONSTEXPR chrono::year year() const BOOST_NOEXCEPT
- BOOST_FORCEINLINE BOOST_CHRONO_EXPLICT BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CHRONO_EXPLICIT BOOST_CONSTEXPR operator chrono::year() const BOOST_NOEXCEPT
       {
         return chrono::year(y_);
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::month_day get_month_day() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::month_day() const BOOST_NOEXCEPT
       {
- return chrono::month_day(chrono::month(m_), chrono::day(d_));
+ return chrono::month_day(chrono::month(m_, no_check), chrono::day(d_, no_check));
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::year_month get_year_month() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year_month() const BOOST_NOEXCEPT
       {
- return chrono::year_month(chrono::year(y_),chrono::month(m_));
+ return chrono::year_month(chrono::year(y_),chrono::month(m_, no_check));
       }
- BOOST_FORCEINLINE BOOST_CONSTEXPR chrono::year_month_day get_year_month_day() const BOOST_NOEXCEPT
+ BOOST_FORCEINLINE BOOST_CONSTEXPR operator chrono::year_month_day() const BOOST_NOEXCEPT
       {
- return chrono::year_month_day(chrono::year(y_),chrono::month(m_),chrono::day(d_));
+ return chrono::year_month_day(chrono::year(y_),chrono::month(m_, no_check),chrono::day(d_, no_check));
       }
       /**
- * Returns: whether year() is a leap year.
+ * @Returns whether year() is a leap year.
        */
       BOOST_FORCEINLINE BOOST_CONSTEXPR bool is_leap_year() const BOOST_NOEXCEPT
       {
@@ -598,7 +1081,7 @@
       }
 
       /**
- * @Returns: A weekday constructed with an int corresponding to *this
+ * @Returns A weekday constructed with an int corresponding to *this
        * ymd_date's day of the week (a value in the range of [0 - 6], 0 is Sunday).
        *
        * @Notes this function needs a conversion to @c days_date, so maybe you would do better to not use it.
@@ -610,25 +1093,25 @@
       }
 
 // /**
-// * @Effects: Adds d.count() days to the current ymd_date.
-// * @Returns: *this.
-// * @Throws: If the addition would create a ymd_date with a y_ outside of the
+// * @Effects Adds d.count() days to the current ymd_date.
+// * @Returns *this.
+// * @Throws If the addition would create a ymd_date with a y_ outside of the
 // * range of year, throws an exception of type bad_date.
 // *
 // */
 // ymd_date& operator+=(days d);
 //
 // /**
-// * @Effects: *this += days(1).
-// * @Returns: *this.
+// * @Effects *this += days(1).
+// * @Returns *this.
 // */
 // ymd_date& operator++()
 // {
 // return *this += days(1);
 // }
 // /**
-// * @Effects: *this += days(1).
-// * @Returns: A copy of *this prior to the increment.
+// * @Effects *this += days(1).
+// * @Returns A copy of *this prior to the increment.
 // */
 // ymd_date operator++(int)
 // {
@@ -637,24 +1120,24 @@
 // return tmp;
 // }
 // /**
-// * @Effects: *this += -d.
-// * @Returns: *this.
+// * @Effects *this += -d.
+// * @Returns *this.
 // */
 // ymd_date& operator-=(days d)
 // {
 // return *this += -d;
 // }
 // /**
-// * @Effects: *this -= days(1).
-// * @Returns: *this.
+// * @Effects *this -= days(1).
+// * @Returns *this.
 // */
 // ymd_date& operator--()
 // {
 // return *this -= days(1);
 // }
 // /**
-// * @Effects: *this -= days(1).
-// * @Returns: A copy of *this prior to the increment.
+// * @Effects *this -= days(1).
+// * @Returns A copy of *this prior to the increment.
 // */
 // ymd_date operator--(int)
 // {
@@ -662,7 +1145,7 @@
 // }
 //
 // /**
-// * @Returns: dt += d.
+// * @Returns dt += d.
 // *
 // */
 // friend ymd_date operator+(ymd_date dt, days d)
@@ -671,7 +1154,7 @@
 // return dt;
 // }
 // /**
-// * @Returns: dt += d.
+// * @Returns dt += d.
 // *
 // */
 // friend ymd_date operator+(days d, ymd_date dt)
@@ -680,7 +1163,7 @@
 // return dt;
 // }
 // /**
-// * @Returns: dt -= d.
+// * @Returns dt -= d.
 // *
 // */
 // friend ymd_date operator-(ymd_date dt, days d)
@@ -689,7 +1172,7 @@
 // return dt;
 // }
 // /**
-// * @Returns: Computes the number of days x is ahead of y in the calendar,
+// * @Returns Computes the number of days x is ahead of y in the calendar,
 // * and returns that signed integral number n as days(n).
 // */
 // friend days operator-(ymd_date x, ymd_date y) BOOST_NOEXCEPT
@@ -716,9 +1199,9 @@
        * in May, adding two months to this ymd_date results in the second Sunday
        * in July.
        *
- * @Returns: *this.
+ * @Returns *this.
        *
- * @Throws: If the addition would create a ymd_date with a y_ outside of the
+ * @Throws If the addition would create a ymd_date with a y_ outside of the
        * range of year, or a d_ outside the range for the newly computed y_/m_,
        * throws an exception of type bad_date.
        *
@@ -726,7 +1209,7 @@
       ymd_date& operator+=(months m);
 
       /**
- * Returns: *this += -m.
+ * @Returns *this += -m.
        */
       ymd_date& operator-=(months m)
       {
@@ -734,50 +1217,22 @@
       }
 
       /**
- * @Returns: dt += m.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, months m)
- {
- dt += m;
- return dt;
- }
- /**
- * @Returns: dt += m.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator+(months m, ymd_date dt)
- {
- dt += m;
- return dt;
- }
- /**
- * @Returns: dt += -m.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, months m)
- {
- dt -= m;
- return dt;
- }
-
- /*
- * @Effects: Adds y.count() years to the current ymd_date.
+ * @Effects Adds y.count() years to the current ymd_date.
        * This is accomplished as if by storing temporary values of the ymd_date's
        * y_, m_, d_. Computing a new value for y_. And then assigning to *this
        * a new ymd_date constructed from the newly computed y_, and the original m_, d_.
        * @Note: Thus for example if a ymd_date is constructed as the second Sunday
        * in May 2011, adding two years to this ymd_date results in the second Sunday
        * in May 2013.
- * @Returns: *this.
- * @Throws: If the addition would create a ymd_date with a y_ outside of the
+ * @Returns *this.
+ * @Throws If the addition would create a ymd_date with a y_ outside of the
        * range of year, or a d_ outside the range for the newly computed y_/m_,
        * throws an exception of type bad_date.
        */
       ymd_date& operator+=(years y);
 
       /**
- * @Returns: *this += -y.
+ * @Returns *this += -y.
        *
        */
       BOOST_FORCEINLINE ymd_date& operator-=(years y)
@@ -785,79 +1240,9 @@
         return *this += years(-y.count());
       }
 
- /**
- * @Returns: dt += y.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, years y)
- {
- dt += y;
- return dt;
- }
- /**
- * @Returns: dt += y.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator+(years y, ymd_date dt)
- {
- dt += y;
- return dt;
- }
- /**
- * @Returns: dt -= y.
- *
- */
- friend BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, years y)
- {
- dt -= y;
- return dt;
- }
-
- /**
- * Returns: x.year() == y.year() && x.month() == y.month() && x.day() == y.day()
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
- {
- return x.y_ == y.y_ && x.m_ == y.m_ && x.d_ == y.d_;
- }
- /**
- * Returns: x.year_month_day() < y.year_month_day() in lexicographic order.
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y)
- {
- return x.y_ < y.y_ ||
- (!(y.y_ < x.y_) && (x.m_ < y.m_ ||
- (!(y.m_ < x.m_) && x.d_ < y.d_)));
- }
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
+ friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT;
 
- /**
- * @Returns: !(x == y).
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator!=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
- {
- return !(x == y);
- }
- /**
- * @Returns: y < x.
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator> (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
- {
- return y < x;
- }
- /**
- * @Returns: !(y < x).
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator<=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
- {
- return !(y < x);
- }
- /**
- * @Returns: !(x < y).
- */
- friend BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator>=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
- {
- return !(x < y);
- }
 
 #if ! defined BOOST_CHRONO_DATE_DOXYGEN_INVOKED
     private:
@@ -866,12 +1251,118 @@
 #endif
 
     };
+
+ /**
+ * @Returns dt += m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, months m)
+ {
+ dt += m;
+ return dt;
+ }
+ /**
+ * @Returns dt += m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(months m, ymd_date dt)
+ {
+ dt += m;
+ return dt;
+ }
+ /**
+ * @Returns dt += -m.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, months m)
+ {
+ dt -= m;
+ return dt;
+ }
+
+ /**
+ * @Returns dt += y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(ymd_date dt, years y)
+ {
+ dt += y;
+ return dt;
+ }
+ /**
+ * @Returns dt += y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator+(years y, ymd_date dt)
+ {
+ dt += y;
+ return dt;
+ }
+ /**
+ * @Returns dt -= y.
+ *
+ */
+ BOOST_FORCEINLINE ymd_date operator-(ymd_date dt, years y)
+ {
+ dt -= y;
+ return dt;
+ }
+
+ /**
+ * @Returns x.year() == y.year() && x.month() == y.month() && x.day() == y.day()
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator==(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return x.y_ == y.y_ && x.m_ == y.m_ && x.d_ == y.d_;
+ }
+ /**
+ * @Returns x.year_month_day() < y.year_month_day() in lexicographic order.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator< (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return x.y_ < y.y_ ||
+ (!(y.y_ < x.y_) && (x.m_ < y.m_ ||
+ (!(y.m_ < x.m_) && x.d_ < y.d_)));
+ }
+
+ /**
+ * @Returns !(x == y).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator!=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(x == y);
+ }
+ /**
+ * @Returns y < x.
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator> (const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return y < x;
+ }
+ /**
+ * @Returns !(y < x).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator<=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(y < x);
+ }
+ /**
+ * @Returns !(x < y).
+ */
+ BOOST_FORCEINLINE BOOST_CONSTEXPR bool operator>=(const ymd_date& x, const ymd_date& y) BOOST_NOEXCEPT
+ {
+ return !(x < y);
+ }
+
     /**
      * Partial specialization of @c is_date<ymd_date> as a @c true_type.
      */
     template <>
     struct is_date<ymd_date> : true_type {};
 
+ template <>
+ struct is_date<unchecked::ymd_date> : true_type {};
+
 // /**
 // * A type representing an optional ymd_date.
 // */
@@ -900,14 +1391,7 @@
     {
       return ymd_date(year(ym), month(ym), d);
     }
- /**
- * @c ymd_date factory.
- * @Returns @c ym/day(d)
- */
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date operator/(year_month ym, int d)
- {
- return ym / day(d);
- }
+
     /**
      * @c ymd_date factory.
      * @Returns @c ymd_date(y,month(md),day(md))
@@ -916,6 +1400,7 @@
     {
       return ymd_date(y, month(md), day(md));
     }
+
     /**
      * @c ymd_date factory.
      * @Returns @c ymd_date(y,month(md),day(md))
@@ -937,36 +1422,16 @@
     {
       return ymd_date(y, m, d);
     }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y,month m, int d)
- {
- return ymd_date(y, m, day(d));
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y,int m, day d)
- {
- return ymd_date(y, month(m), d);
- }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(int y,month m, day d)
- {
- return ymd_date(year(y), m, d);
- }
 
     BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year_month ym, day d)
     {
       return ymd_date(year(ym), month(ym), d);
     }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year_month ym, int d)
- {
- return ymd_date(year(ym), month(ym), day(d));
- }
 
     BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(year y, month_day md)
     {
       return ymd_date(y, md);
     }
- BOOST_FORCEINLINE BOOST_CHRONO_DATE_CONSTEXPR ymd_date make_date(int y, month_day md)
- {
- return ymd_date(year(y), md);
- }
 
   } // chrono
 

Modified: sandbox/chrono_date/libs/date/doc/Jamfile.v2
==============================================================================
--- sandbox/chrono_date/libs/date/doc/Jamfile.v2 (original)
+++ sandbox/chrono_date/libs/date/doc/Jamfile.v2 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -47,13 +47,16 @@
                                    \"BOOST_STATIC_CONSTEXPR=static constexpr\" \\
                                    \"BOOST_DEDUCED_TYPENAME=typename\" \\
                                    \"BOOST_EXPLICIT=explicit\" \\
+ \"BOOST_CHRONO_EXPLICIT=explicit\" \\
                                    \"BOOST_NOEXCEPT=noexcept\" \\
                                    \"BOOST_PREVENT_MACRO_SUBSTITUTION=\" \\
                                    \"BOOST_STATIC_CONSTANT(x,y)=static x const y\" \\
                                    \"BOOST_STATIC_ASSERT(cnd)=\" \\
                                    \"BOOST_CHRONO_DATE_REQUIRES(CND) \" \\
                                    \"BOOST_CHRONO_INLINE \" \\
+ \"BOOST_FORCEINLINE \" \\
                                    \"BOOST_CONSTEXPR_OR_CONST=constexpr\" \\
+ \"BOOST_CHRONO_DATE_CONSTEXPR=constexpr\" \\
                                    \"BOOST_CONSTEXPR=constexpr\"" \\
 
 
@@ -69,6 +72,7 @@
                                  Pre=\"<p><b>Requires:</b>\" \\
                                  Requires=\"<p><b>Requires:</b>\" \\
                                  Post=\"<p><b>Post-conditions:</b>\" \\
+ Postconditions=\"<p><b>Post-conditions:</b>\" \\
                                  Condition=\"<p><b>Condition:</b>\" \\
                                  Remark=\"<p><b>Remark(s):</b>\" \\
                                  Note=\"<p><b>Note(s):</b>\" \\
@@ -116,15 +120,19 @@
                                    \"BOOST_STATIC_CONSTEXPR=static constexpr\" \\
                                    \"BOOST_DEDUCED_TYPENAME=typename\" \\
                                    \"BOOST_EXPLICIT=explicit\" \\
+ \"BOOST_CHRONO_EXPLICIT=explicit\" \\
                                    \"BOOST_NOEXCEPT=noexcept\" \\
                                    \"BOOST_PREVENT_MACRO_SUBSTITUTION=\" \\
                                    \"BOOST_STATIC_CONSTANT(x,y)=static x const y\" \\
                                    \"BOOST_STATIC_ASSERT(cnd)=\" \\
                                    \"BOOST_CHRONO_DATE_REQUIRES(CND) \" \\
                                    \"BOOST_CHRONO_INLINE \" \\
+ \"BOOST_FORCEINLINE \" \\
                                    \"BOOST_CONSTEXPR_OR_CONST=constexpr\" \\
+ \"BOOST_CHRONO_DATE_CONSTEXPR=constexpr\" \\
                                    \"BOOST_CONSTEXPR=constexpr\""
 
+
 # \"BOOST_CHRONO_DATE_REQUIRES(CND) , typename enable_if_c< CND >::type\" \\
 
         <doxygen:param>ALIASES=" Effects=\"<p><b>Effects:</b>\" \\
@@ -139,6 +147,7 @@
                                  Requires=\"<p><b>Requires:</b>\" \\
                                  Condition=\"<p><b>Condition:</b>\" \\
                                  Post=\"<p><b>Post-conditions:</b>\" \\
+ Postconditions=\"<p><b>Post-conditions:</b>\" \\
                                  Remark=\"<p><b>Remark(s):</b>\" \\
                                  Note=\"<p><b>Note(s):</b>\" \\
                                  See=\"<p><b>See:</b>\" \\

Modified: sandbox/chrono_date/libs/date/example/hello_world.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/example/hello_world.cpp (original)
+++ sandbox/chrono_date/libs/date/example/hello_world.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -71,7 +71,7 @@
     date dt = aug/day(16)/2011;
     // ...
     // Create date with the same month and year but on the 5th
- date dt2 = year(dt)/month(dt)/5; // aug/5/2011
+ date dt2 = year_month(dt)/day(5, no_check); // aug/5/2011
     (void)dt2;
     int d = day(dt); // d == 5
     int m = month(dt); // m == 8
@@ -187,7 +187,7 @@
       for (rel_date d = last/jan/2011, e = last/dec/2011; d <= e; d += months(1))
       {
           if (day(d) >= 29)
- std::cout << year(d)/month(d)/29 << '\n';
+ std::cout << year(d)/month(d)/day(29,no_check) << '\n';
       }
     }
     {

Modified: sandbox/chrono_date/libs/date/example/julian.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/example/julian.cpp (original)
+++ sandbox/chrono_date/libs/date/example/julian.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -153,7 +153,7 @@
     int* year_data = db[is_civil_leap(y)];
     int m = std::lower_bound(year_data, year_data + 13, doy) - year_data;
     int d = doy - year_data[m - 1];
- return boost::chrono::year(y) / boost::chrono::month(m) / d;
+ return boost::chrono::year(y) / boost::chrono::month(m) / boost::chrono::day(d);
   }
 
   date::date(julian::year y, julian::month m, julian::day d) :

Modified: sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp (original)
+++ sandbox/chrono_date/libs/date/perf/serial_calendar_conversions.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -24,17 +24,22 @@
 void empty_unchecked_ymd_dcl()
 {
   int count = 0;
+ int ycount = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int y = Ymin; y <= Ymax; ++y)
   {
     bool is_l = year(y).is_leap();
     for (int m = 1; m <= 12; ++m)
     {
- int last = month(m).days_in(is_l).count();
+ int last = unchecked::month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
- volatile ymd_date dt = ymd_date(year(y), month(m), d);
- (void)dt;
+ unchecked::ymd_date dt=unchecked::ymd_date(
+ year(y),
+ unchecked::month(m),
+ unchecked::day(d)
+ );
+ ycount+= unchecked::day(dt);
         ++count;
       }
     }
@@ -42,11 +47,12 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "unchecked ymd " << sec(encode).count() / count << '\n';
+ std::cout << "unchecked calendar " << sec(encode).count() / count << " " << ycount << '\n';
 }
 void empty_checked_ymd_dcl()
 {
   int count = 0;
+ int ycount = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int y = Ymin; y <= Ymax; ++y)
   {
@@ -56,8 +62,8 @@
       int last = month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
- volatile ymd_date dt = ymd_date(year(y), month(m, check), day(d,check), check);
- (void)dt;
+ ymd_date dt = ymd_date(year(y), month(m), day(d));
+ ycount+= day(dt);
         ++count;
       }
     }
@@ -65,12 +71,13 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "checked ymd " << sec(encode).count() / count << '\n';
+ std::cout << "checked calendar " << sec(encode).count() / count << " " << ycount << '\n';
 }
 
 void empty_encoding_perf()
 {
   int count = 0;
+ int ycount = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int y = Ymin; y <= Ymax; ++y)
   {
@@ -80,6 +87,7 @@
       int last = month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
+ ycount+= d;
         ++count;
       }
     }
@@ -87,7 +95,7 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "ENCODE empty " << sec(encode).count() / count << '\n';
+ std::cout << "ymd empty loop " << sec(encode).count() / count << " " << ycount << '\n';
 }
 
 void raw_encoding_perf()
@@ -111,7 +119,7 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "ENCODE raw " << sec(encode).count() / count << '\n';
+ std::cout << "calendar -> serial raw " << sec(encode).count() / count << '\n';
 }
 
 void raw_space_encoding_perf()
@@ -135,7 +143,7 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "ENCODE space " << sec(encode).count() / count << '\n';
+ std::cout << "calendar -> serial space " << sec(encode).count() / count << '\n';
 }
 
 void class_encoding_perf()
@@ -150,7 +158,7 @@
       int last = month(m).days_in(is_l).count();
       for (int d = 1; d <= last; ++d)
       {
- volatile days::rep ds = days_date(ymd_date(year(y), month(m), d)).days_since_epoch().count();
+ volatile days::rep ds = days_date(unchecked::ymd_date(year(y), unchecked::month(m), unchecked::day(d))).days_since_epoch().count();
         (void)ds;
         ++count;
       }
@@ -159,86 +167,232 @@
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto encode = t1 - t0;
- std::cout << "ENCODE class " << sec(encode).count() / count << '\n';
+ std::cout << "calendar -> serial class " << sec(encode).count() / count << '\n';
 }
 
+
 void empty_decoding_perf()
 {
 
- const int k0 = days_date(year(Ymin)/month(1)/1).days_since_epoch().count();
- const int k1 = days_date(year(Ymax)/month(12)/31).days_since_epoch().count();
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
   int count = 0;
+ int ycount = 0;
+ int y2count = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int k = k0; k <= k1; ++k)
   {
- VOLATILE days_date dt((days(k)));
- (void)dt;
+ days_date dt((days(k)));
+ ycount+= dt.days_since_epoch().count();
+ y2count+= k;
     ++count;
 
   }
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto decode = t1 - t0;
- std::cout << "DECODE empty " << sec(decode).count() / count << '\n';
+ std::cout << "serial empty " << sec(decode).count() / count << " " << ycount <<" " << y2count << '\n';
 }
 void raw_decoding_perf()
 {
 
- const int k0 = days_date(year(Ymin)/month(1)/1).days_since_epoch().count();
- const int k1 = days_date(year(Ymax)/month(12)/31).days_since_epoch().count();
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
   int count = 0;
+ int ycount = 0;
+ int y2count = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int k = k0; k <= k1; ++k)
   {
- VOLATILE days_date dt1((days(k)));
+ days_date dt1((days(k)));
     to_ymd(const_cast<days_date&>(dt1).days_since_epoch().count(), const_cast<int&>(y),const_cast<int &>(m),const_cast<int&>(d));
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= k;
     ++count;
 
   }
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto decode = t1 - t0;
- std::cout << "DECODE raw " << sec(decode).count() / count << '\n';
+ std::cout << "serial -> calendar raw " << sec(decode).count() / count << " " << ycount <<" " << y2count << '\n';
 }
 
 void raw_space_decoding_perf()
 {
 
- const int k0 = days_date(year(Ymin)/month(1)/1).days_since_epoch().count();
- const int k1 = days_date(year(Ymax)/month(12)/31).days_since_epoch().count();
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
   int count = 0;
+ int ycount = 0;
+ int y2count = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int k = k0; k <= k1; ++k)
   {
- VOLATILE days_date dt1((days(k)));
+ days_date dt1((days(k)));
     to_ymd(const_cast<days_date&>(dt1).days_since_epoch().count(), const_cast<boost::int_least32_t&>(y),const_cast<boost::int_least16_t &>(m16),const_cast<boost::int_least16_t&>(d16));
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= k;
     ++count;
 
   }
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto decode = t1 - t0;
- std::cout << "DECODE space " << sec(decode).count() / count << '\n';
+ std::cout << "serial -> calendar space " << sec(decode).count() / count << " " << ycount <<" " << y2count << '\n';
 }
 
 void class_decoding_perf()
 {
 
- const int k0 = days_date(year(Ymin)/month(1)/1).days_since_epoch().count();
- const int k1 = days_date(year(Ymax)/month(12)/31).days_since_epoch().count();
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
+ int count = 0;
+ int ycount = 0;
+ int y2count = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int k = k0; k <= k1; ++k)
+ {
+ days_date dt1((days(k)));
+ ymd_date dt2(const_cast<days_date&>(dt1));
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= day(dt2);
+ ++count;
+
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto decode = t1 - t0;
+ std::cout << "serial -> calendar class " << sec(decode).count() / count << " " << ycount <<" " << y2count << '\n';
+}
+
+void class_decoding_encoding_perf()
+{
+
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
+ int count = 0;
+ int ycount = 0;
+ int y2count = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int k = k0; k <= k1; ++k)
+ {
+ days_date dt1((days(k)));
+ ymd_date dt2(const_cast<days_date&>(dt1));
+ days_date dt3(dt2);
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= (dt1==dt3);
+ ++count;
+
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto decode = t1 - t0;
+ std::cout << "serial -> calendar -> serial class " << sec(decode).count() / count << " " << ycount <<" " << count <<" " << y2count << '\n';
+}
+
+void unchecked_class_decoding_perf()
+{
+
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
+ int count = 0;
+ int ycount = 0;
+ int y2count = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int k = k0; k <= k1; ++k)
+ {
+ days_date dt1((days(k)));
+ unchecked::ymd_date dt2(const_cast<days_date&>(dt1));
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= unchecked::day(dt2);
+ ++count;
+
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto decode = t1 - t0;
+ std::cout << "serial -> unchecked calendar class " << sec(decode).count() / count << " " << ycount <<" " << y2count << '\n';
+}
+void unchecked_class_decoding_encoding_perf()
+{
+
+ const int k0 = days_date(year(Ymin)/month(1)/day(1)).days_since_epoch().count();
+ const int k1 = days_date(year(Ymax)/month(12)/day(31)).days_since_epoch().count();
   int count = 0;
+ int ycount = 0;
+ int y2count = 0;
   auto t0 = boost::chrono::high_resolution_clock::now();
   for (int k = k0; k <= k1; ++k)
   {
- VOLATILE days_date dt1((days(k)));
- VOLATILE ymd_date dt2(const_cast<days_date&>(dt1));
+ days_date dt1((days(k)));
+ unchecked::ymd_date dt2(const_cast<days_date&>(dt1));
+ days_date dt3(dt2);
+ ycount+= dt1.days_since_epoch().count();
+ y2count+= (dt1==dt3);
     ++count;
 
   }
   auto t1 = boost::chrono::high_resolution_clock::now();
   typedef boost::chrono::duration<float, boost::nano> sec;
   auto decode = t1 - t0;
- std::cout << "DECODE class " << sec(decode).count() / count << '\n';
+ std::cout << "serial -> unchecked calendar -> serial class " << sec(decode).count() / count << " " << ycount <<" " << count <<" " << y2count << '\n';
+}
+
+void class_encoding_decoding_perf()
+{
+ int count = 0;
+ int ycount = 0;
+ int y2count = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ ymd_date dt1=ymd_date(year(y), month(m), day(d));
+ days_date dt2(dt1);
+ ymd_date dt3(dt2);
+ ycount+= dt2.days_since_epoch().count();
+ y2count+= (dt1==dt3);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << " calendar -> serial -> calendar " << sec(encode).count() / count << " " << ycount <<" " << count <<" " << y2count << '\n';
+}
+void unchecked_class_encoding_decoding_perf()
+{
+ int count = 0;
+ int ycount = 0;
+ int y2count = 0;
+ auto t0 = boost::chrono::high_resolution_clock::now();
+ for (int y = Ymin; y <= Ymax; ++y)
+ {
+ bool is_l = year(y).is_leap();
+ for (int m = 1; m <= 12; ++m)
+ {
+ int last = month(m).days_in(is_l).count();
+ for (int d = 1; d <= last; ++d)
+ {
+ unchecked::ymd_date dt1=unchecked::ymd_date(year(y), unchecked::month(m), unchecked::day(d));
+ days_date dt2(dt1);
+ unchecked::ymd_date dt3(dt2);
+ ycount+= dt2.days_since_epoch().count();
+ y2count+= (dt1==dt3);
+ ++count;
+ }
+ }
+ }
+ auto t1 = boost::chrono::high_resolution_clock::now();
+ typedef boost::chrono::duration<float, boost::nano> sec;
+ auto encode = t1 - t0;
+ std::cout << "unchecked calendar -> serial -> unchecked calendar " << sec(encode).count() / count << " " << ycount <<" " << count <<" " << y2count << '\n';
 }
 
 int main()
@@ -254,7 +408,49 @@
   raw_decoding_perf();
   raw_space_decoding_perf();
   class_decoding_perf();
+ class_decoding_encoding_perf();
+ unchecked_class_decoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ class_decoding_perf();
+ class_decoding_encoding_perf();
 
+ empty_encoding_perf();
+ empty_checked_ymd_dcl();
+ empty_unchecked_ymd_dcl();
+ empty_encoding_perf();
+ raw_encoding_perf();
+ raw_space_encoding_perf();
+ class_encoding_perf();
+ empty_decoding_perf();
+ raw_decoding_perf();
+ raw_space_decoding_perf();
+ class_decoding_perf();
+ class_decoding_encoding_perf();
+ unchecked_class_decoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ class_decoding_perf();
+ class_decoding_encoding_perf();
+ class_decoding_encoding_perf();
+ class_decoding_encoding_perf();
+ class_decoding_encoding_perf();
+ class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+ unchecked_class_decoding_encoding_perf();
+
+ class_encoding_decoding_perf();
+ class_encoding_decoding_perf();
+ class_encoding_decoding_perf();
+ class_encoding_decoding_perf();
+ class_encoding_decoding_perf();
+ unchecked_class_encoding_decoding_perf();
+ unchecked_class_encoding_decoding_perf();
+ unchecked_class_encoding_decoding_perf();
+ unchecked_class_encoding_decoding_perf();
+ unchecked_class_encoding_decoding_perf();
   return 1;
 }
 

Modified: sandbox/chrono_date/libs/date/src/conversions.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/src/conversions.cpp (original)
+++ sandbox/chrono_date/libs/date/src/conversions.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -150,7 +150,7 @@
       const bool leap = is_leap(y);
       const month::rep m = day_of_year_month(leap,doy+1);
       const day::rep d = day_of_year_day_of_month(leap,doy+1);
- return year_month_day(year(y), month(m), day(d));
+ return year_month_day(year(y), month(m), day(d, no_check));
     }
     year_month_day_leap to_ymd_leap(days dt) BOOST_NOEXCEPT
     {
@@ -206,7 +206,7 @@
     year_month_day to_ymd(year_day_of_year dt) BOOST_NOEXCEPT
     {
       bool leap=year(dt).is_leap();
- return year_month_day(year(year(dt)), month(day_of_year_month(leap,day_of_year(dt))), day(day_of_year_day_of_month(leap,day_of_year(dt))));
+ return year_month_day(year(year(dt)), month(day_of_year_month(leap,day_of_year(dt))), day(day_of_year_day_of_month(leap,day_of_year(dt)), no_check));
     }
 
 

Modified: sandbox/chrono_date/libs/date/src/rel_date.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/src/rel_date.cpp (original)
+++ sandbox/chrono_date/libs/date/src/rel_date.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -1439,7 +1439,7 @@
     BOOST_NOEXCEPT
     {
       return to_ymd(
- ( (mon <= jan / day(4) / year(p))
+ ( (mon <= jan / day(4, no_check) / year(p))
            + days(
                   (week(p) - 1) * weekday::size + (weekday(p) == 0 ? weekday::size-1 : weekday(p) - 1)
              )
@@ -1463,7 +1463,7 @@
     BOOST_NOEXCEPT
     {
       days_date dt(month(ymd)/day(ymd)/year(ymd));
- chrono::month_day jan4 = jan / day(4);
+ chrono::month_day jan4 = jan / day(4, no_check);
       days_date jan4_y(jan4 / year(ymd));
       days_date jan4_y_m_1(jan4 / (year(ymd)-1));
       days_date jan4_y_p_1(jan4 / (year(ymd)+1));
@@ -1482,7 +1482,7 @@
       }
       return year_week_weekday(
           (thu > start).to_year(),
- (dt - start).count() / weekday::size + 1,
+ week((dt - start).count() / weekday::size + 1),
           weekday(dt)
       );
     }

Modified: sandbox/chrono_date/libs/date/src/vars.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/src/vars.cpp (original)
+++ sandbox/chrono_date/libs/date/src/vars.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -24,6 +24,12 @@
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _3rd, 3)
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _4th, 4)
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _5th, 5)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _6th, 6)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _7th, 7)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _8th, 8)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _9th, 9)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _10th, 10)
+ BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(nth_tag, _29th, 29)
 
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(month, jan, 1)
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(month, feb, 2)
@@ -47,42 +53,42 @@
     BOOST_CONSTEXPR_OR_EXTERN_CONST_DEF(weekday, sat, 6)
 
 
- const month_nth jan_1st(month(1), 1);
+// const month_nth jan_1st(month(1), 1);
+//
+// const month_day jan_01(month(1), day( 1, no_check));
+// const month_day jan_02(month(1), day( 2, no_check));
+// const month_day jan_03(month(1), day( 3, no_check));
+// const month_day jan_04(month(1), day( 4, no_check));
+// const month_day jan_05(month(1), day( 5, no_check));
+// const month_day jan_06(month(1), day( 6, no_check));
+// const month_day jan_07(month(1), day( 7, no_check));
+// const month_day jan_08(month(1), day( 8, no_check));
+// const month_day jan_09(month(1), day( 9, no_check));
+// const month_day jan_10(month(1), day( 10, no_check));
+// const month_day jan_11(month(1), day( 11, no_check));
+// const month_day jan_12(month(1), day( 12, no_check));
+// const month_day jan_13(month(1), day( 13, no_check));
+// const month_day jan_14(month(1), day( 14));
+// const month_day jan_15(month(1), day( 15));
+// const month_day jan_16(month(1), day( 16));
+// const month_day jan_17(month(1), day( 17));
+// const month_day jan_18(month(1), day( 18));
+// const month_day jan_19(month(1), day( 19));
+// const month_day jan_20(month(1), day( 20));
+// const month_day jan_21(month(1), day( 21));
+// const month_day jan_22(month(1), day( 22));
+// const month_day jan_23(month(1), day( 23));
+// const month_day jan_24(month(1), day( 24));
+// const month_day jan_25(month(1), day( 25));
+// const month_day jan_26(month(1), day( 26));
+// const month_day jan_27(month(1), day( 27));
+// const month_day jan_28(month(1), day( 28));
+// const month_day jan_29(month(1), day( 29));
+// const month_day jan_30(month(1), day( 30));
+// const month_day jan_31(month(1), day( 31));
 
- const month_day jan_01(month(1), day( 1));
- const month_day jan_02(month(1), day( 2));
- const month_day jan_03(month(1), day( 3));
- const month_day jan_04(month(1), day( 4));
- const month_day jan_05(month(1), day( 5));
- const month_day jan_06(month(1), day( 6));
- const month_day jan_07(month(1), day( 7));
- const month_day jan_08(month(1), day( 8));
- const month_day jan_09(month(1), day( 9));
- const month_day jan_10(month(1), day( 10));
- const month_day jan_11(month(1), day( 11));
- const month_day jan_12(month(1), day( 12));
- const month_day jan_13(month(1), day( 13));
- const month_day jan_14(month(1), day( 14));
- const month_day jan_15(month(1), day( 15));
- const month_day jan_16(month(1), day( 16));
- const month_day jan_17(month(1), day( 17));
- const month_day jan_18(month(1), day( 18));
- const month_day jan_19(month(1), day( 19));
- const month_day jan_20(month(1), day( 20));
- const month_day jan_21(month(1), day( 21));
- const month_day jan_22(month(1), day( 22));
- const month_day jan_23(month(1), day( 23));
- const month_day jan_24(month(1), day( 24));
- const month_day jan_25(month(1), day( 25));
- const month_day jan_26(month(1), day( 26));
- const month_day jan_27(month(1), day( 27));
- const month_day jan_28(month(1), day( 28));
- const month_day jan_29(month(1), day( 29));
- const month_day jan_30(month(1), day( 30));
- const month_day jan_31(month(1), day( 31));
 
-
- BOOST_STATIC_CONSTEXPR day::rep days_in_month_[2][13] =
+ BOOST_STATIC_CONSTEXPR day_rep days_in_month_[2][13] =
     {
     { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
     { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
@@ -92,8 +98,11 @@
     {
 #ifndef BOOST_NO_CXX11_CONSTEXPR
 #else
- day::rep max_days_in_month_[13] =
+ day_rep leap_days_in_month_[13] =
         { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+
+ day_rep normal_days_in_month_[13] =
+ { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 #endif
     }
 
@@ -220,14 +229,14 @@
       return *this;
     }
 
- months operator-(year_month x, year_month y) BOOST_NOEXCEPT
- {
- year::rep y1 = x.y_;
- month::rep m1 = x.m_;
- year::rep y2 = y.y_;
- month::rep m2 = y.m_;
- return months(y1 * 12 + m1 - (y2 * 12 + m2));
- }
+// months operator-(year_month x, year_month y) BOOST_NOEXCEPT
+// {
+// year::rep y1 = x.y_;
+// month::rep m1 = x.m_;
+// year::rep y2 = y.y_;
+// month::rep m2 = y.m_;
+// return months(y1 * 12 + m1 - (y2 * 12 + m2));
+// }
 
 } // boost
   } // chrono

Modified: sandbox/chrono_date/libs/date/src/ymd_date.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/src/ymd_date.cpp (original)
+++ sandbox/chrono_date/libs/date/src/ymd_date.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -17,14 +17,246 @@
 {
   namespace chrono
   {
+ namespace unchecked
+ {
+ ymd_date ymd_date::today() BOOST_NOEXCEPT
+ {
+ time_t systime;
+ time(&systime);
+ tm now;
+ localtime_r(&systime, &now);
+ return ymd_date(chrono::year(now.tm_year + 1900), month(now.tm_mon + 1), day(now.tm_mday));
+ }
+
+ ymd_date::ymd_date(system_clock::time_point tp)
+ {
+ time_t systime = system_clock::to_time_t(tp);
+ tm now;
+ gmtime_r(&systime, &now);
+ *this = ymd_date(chrono::year(now.tm_year + 1900), month(now.tm_mon + 1), day(now.tm_mday));
+ }
+
+ ymd_date::operator system_clock::time_point() const
+ {
+ tm now =
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ now.tm_year = year(*this) - 1900;
+ now.tm_mon = month(*this) - 1;
+ now.tm_mday = day(*this);
+ time_t t = timegm(&now);
+ return system_clock::from_time_t(t);
+ }
 
+ // bool ymd_date::is_valid() const BOOST_NOEXCEPT
+ // {
+ // //if (chrono::year(y_).is_valid() && chrono::month(m_).is_valid() && chrono::day(d_).is_valid())
+ // {
+ // const day_of_year::rep* year_data = days_in_year_before(is_leap_year());
+ //
+ // if (! (1 <= d_ && d_ <= year_data[m_] - year_data[m_ - 1]))
+ // {
+ // return false;
+ // }
+ // else
+ // {
+ // return true;
+ // }
+ // }
+ // return false;
+ //
+ // }
+
+ bool ymd_date::set_if_valid_date(chrono::year y, month m, day d) BOOST_NOEXCEPT
+ {
+ bool leap = y.is_leap();
+ const day_of_year::rep* year_data = days_in_year_before(leap);
+
+ if (! (d <= year_data[m] - year_data[m - 1]))
+ {
+ return false;
+ }
+ y_ = y;
+ m_ = m;
+ d_ = d;
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ leap_ = leap;
+ #endif
+ return true;
+ }
+
+ // bool ymd_date::set_if_valid_date(chrono::year y, day_of_year doy) BOOST_NOEXCEPT
+ // {
+ // bool leap = y.is_leap();
+ // if (!leap && doy == 366) return false;
+ //
+ // y_ = y;
+ // m_ = day_of_year_month(leap, doy);
+ // d_ = day_of_year_day_of_month(leap, doy);
+ // leap_ = leap;
+ // return true;
+ // }
+
+ // bool ymd_date::set_if_valid_date(days x) BOOST_NOEXCEPT
+ // {
+ // if (! (11322 <= x.count() && x.count() <= 23947853))
+ // {
+ // return false;
+ // }
+ // year_month_day_leap dt = to_ymd_leap(x);
+ // y_ = year(dt);
+ // m_ = month(dt);
+ // d_ = day(dt);
+ // leap_ = dt.is_leap_year();
+ // return true;
+ // }
+
+
+ // ymd_date::ymd_date(chrono::year y, day_of_year doy) BOOST_NOEXCEPT
+ // {
+ // if (set_if_valid_date(y, doy))
+ // return;
+ //
+ // y_ = y;
+ // m_ = 0;
+ // d_ = 0;
+ // leap_ = false;
+ // }
+ //
+ // ymd_date::ymd_date(chrono::year y, day_of_year doy, check_t)
+ // {
+ // if (set_if_valid_date(y, doy))
+ // return;
+ // throw bad_date("doy " + to_string(doy) + " is out of range for year "
+ // + to_string(y) );
+ // }
+ //
+ // ymd_date::ymd_date(days d, check_t)
+ // {
+ // if (set_if_valid_date(d))
+ // return;
+ // throw bad_date("days " + to_string(d.count()) + " is out of range");
+ // }
+ //
+ // ymd_date::ymd_date(days d) BOOST_NOEXCEPT
+ // {
+ // year_month_day_leap dt = to_ymd_leap(d);
+ // y_=year(dt);
+ // m_=month(dt);
+ // d_=day(dt);
+ // leap_=dt.is_leap_year();
+ // }
+
+ ymd_date::ymd_date(days_date dt)
+ {
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ //#if ! defined __clang__
+ #if 0
+ year_month_day_leap ymdl = to_ymd_leap(dt.days_since_epoch());
+ y_=year(ymdl);
+ m_=month(ymdl);
+ d_=day(ymdl);
+ leap_=ymdl.is_leap_year();
+ #else
+ to_ymd_leap(dt.days_since_epoch().count(), y_,m_,d_,leap_);
+ #endif
+ #else
+ to_ymd(dt.days_since_epoch().count(), y_,m_,d_);
+ #endif
+ }
+
+ ymd_date::ymd_date(days d)
+ {
+ #if defined BOOST_CHRONO_DATE_YMD_DATE_HAS_LEAP_FIELD
+ #if 0
+ year_month_day_leap ymdl = to_ymd_leap(d);
+ leap_=ymdl.is_leap_year();
+ y_=year(ymdl);
+ m_=month(ymdl);
+ d_=day(ymdl);
+ #else
+ to_ymd_leap(d.count(), y_,m_,d_,leap_);
+ #endif
+
+ #else
+ to_ymd(d.count(), y_,m_,d_);
+ #endif
+ }
+
+ // ymd_date&
+ // ymd_date::operator+=(days d)
+ // {
+ // days::rep x_ = day_number_from_ymd() + d.count();
+ // if (!(11322 <= x_ && x_ <= 23947853))
+ // {
+ // throw bad_date("year is out of range [-32768, 32767]");
+ // }
+ // year::rep y = to_average_year(x_);
+ // int doy = x_ - (days_before_year(y));
+ // if (doy < 0)
+ // {
+ // --y;
+ // doy = x_ - (days_before_year(y));
+ // }
+ // y_ = static_cast<year::rep> (y - 32799);
+ // leap_ = is_leap(y_);
+ // const day_of_year::rep* year_data = days_in_year_before(leap_);
+ // m_
+ // = static_cast<month::rep> (std::lower_bound(year_data, year_data + 13, doy)
+ // - year_data);
+ // d_ = static_cast<day::rep> (doy - year_data[m_ - 1]);
+ //
+ // return *this;
+ // }
+
+ ymd_date&
+ ymd_date::operator+=(months mn)
+ {
+ int_least32_t y = y_;
+ int32_t m = m_;
+ m += mn.count();
+ if (m < 1)
+ {
+ int dy = (12 - m) / 12;
+ y -= dy;
+ m += 12 * dy;
+ }
+ else if (m > 12)
+ {
+ int dy = (m - 1) / 12;
+ y += dy;
+ m -= 12 * dy;
+ }
+ *this = ymd_date(chrono::year(y), month(m), day(d_));
+ return *this;
+ }
+
+ ymd_date&
+ ymd_date::operator+=(years yr)
+ {
+ *this
+ = ymd_date(chrono::year(y_ + yr.count()), month(m_), day(d_));
+ // y_ += yr.count();
+ return *this;
+ }
+
+ days::rep
+ ymd_date::day_number_from_ymd() const BOOST_NOEXCEPT
+ {
+
+ days::rep by = y_ + 32799;
+ //const day_of_year::rep* year_data = days_in_year_before(is_leap_year());
+ //return days_before_year(by) + year_data[m_-1] + d_;
+ return days_before_year(by) + days_in_year_before(is_leap_year(), m_-1) + d_;
+
+ }
+ }
     ymd_date ymd_date::today() BOOST_NOEXCEPT
     {
       time_t systime;
       time(&systime);
       tm now;
       localtime_r(&systime, &now);
- return ymd_date(chrono::year(now.tm_year + 1900), chrono::month(now.tm_mon + 1), chrono::day(now.tm_mday));
+ return ymd_date(chrono::year(now.tm_year + 1900), chrono::month(now.tm_mon + 1), chrono::day(now.tm_mday, no_check));
     }
 
     ymd_date::ymd_date(system_clock::time_point tp)
@@ -32,7 +264,7 @@
       time_t systime = system_clock::to_time_t(tp);
       tm now;
       gmtime_r(&systime, &now);
- *this = ymd_date(chrono::year(now.tm_year + 1900), chrono::month(now.tm_mon + 1), chrono::day(now.tm_mday));
+ *this = ymd_date(chrono::year(now.tm_year + 1900), chrono::month(now.tm_mon + 1), chrono::day(now.tm_mday, no_check));
     }
 
     ymd_date::operator system_clock::time_point() const
@@ -226,7 +458,7 @@
         m -= 12 * dy;
       }
       *this
- = ymd_date(chrono::year(y, check), m, d_, check);
+ = ymd_date(chrono::year(y), month(m, no_check), day(d_, no_check));
       return *this;
     }
 
@@ -234,8 +466,7 @@
     ymd_date::operator+=(years yr)
     {
       *this
- = ymd_date(chrono::year(y_ + yr.count(), check), chrono::month(m_, check), chrono::day(d_, check), check);
- // y_ += yr.count();
+ = ymd_date(chrono::year(y_ + yr.count()), chrono::month(m_, no_check), chrono::day(d_, no_check));
       return *this;
     }
 

Modified: sandbox/chrono_date/libs/date/test/dates/days/days_date_pass.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/test/dates/days/days_date_pass.cpp (original)
+++ sandbox/chrono_date/libs/date/test/dates/days/days_date_pass.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -88,27 +88,27 @@
     BOOST_TEST(dt.to_day()==22);
   }
   std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
- { // construct from ymd: 2011/jan_01
- //days_date dt(year(2011),jan_01, check);
- days_date dt(jan_01/2011);
+ { // construct from ymd: 2011/jan/day(1, no_check)
+ //days_date dt(year(2011),jan/day(1, no_check), check);
+ days_date dt(jan/day(1, no_check)/2011);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(dt.to_year()==2011);
     BOOST_TEST(dt.to_month()==jan);
     BOOST_TEST(dt.to_day()==1);
   }
   std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
- { // no_check construct from ymd: 2011/jan_01
- //days_date dt(year(2011),jan_01);
- days_date dt(jan_01/2011);
+ { // no_check construct from ymd: 2011/jan/day(1, no_check)
+ //days_date dt(year(2011),jan/day(1, no_check));
+ days_date dt(jan/day(1, no_check)/2011);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(dt.to_year()==2011);
     BOOST_TEST(dt.to_month()==jan);
     BOOST_TEST(dt.to_day()==1);
   }
   std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
- { // construct from ymd: first day: -32768/jan_01
- //days_date dt(year(-32768),jan_01);
- days_date dt(jan_01/-32768);
+ { // construct from ymd: first day: -32768/jan/day(1, no_check)
+ //days_date dt(year(-32768),jan/day(1, no_check));
+ days_date dt(jan/day(1, no_check)/-32768);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(dt.to_year()==-32768);
     BOOST_TEST(dt.to_month()==jan);
@@ -127,7 +127,7 @@
     BOOST_TEST(dt.days_since_epoch().count()==23947853);
     std::cout <<"32767/12/31 days "<< dt.days_since_epoch().count() << std::endl;
   }
- { // construct from days: first day: -32768/jan_01
+ { // construct from days: first day: -32768/jan/day(1, no_check)
     days_date dt(days(11322));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(dt.to_year()==-32768);

Modified: sandbox/chrono_date/libs/date/test/dates/ydoy/ydoy_date_pass.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/test/dates/ydoy/ydoy_date_pass.cpp (original)
+++ sandbox/chrono_date/libs/date/test/dates/ydoy/ydoy_date_pass.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -24,13 +24,13 @@
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(dt.days_since_epoch().count()==11979588);
   }
- { // unchecked construct from bad ymd: 0/0/0 results in valid date
-
- ymd_date dt2(year(0),month(0),day(0));
- ydoy_date dt(dt2);
- std::cout <<"0/0/0 days "<< dt.days_since_epoch().count() << std::endl;
- BOOST_TEST( ! dt.is_valid());
- }
+// { // unchecked construct from bad ymd: 0/0/0 results in valid date
+//
+// unchecked::ymd_date dt2(year(0),unchecked::month(0),unchecked::day(0));
+// ydoy_date dt(dt2);
+// std::cout <<"0/0/0 days "<< dt.days_since_epoch().count() << std::endl;
+// BOOST_TEST( ! dt.is_valid());
+// }
   { // unchecked construct from bad ymd: 0/0/0 results in valid date
     ymd_date dt2(year(40000),month(1),day(1));
     ydoy_date dt(dt2);
@@ -65,7 +65,7 @@
     BOOST_TEST(day(to_ymd_date(dt))==1);
   }
   { // construct from ymd: 2011/oct/22
- ymd_date dt2(year(2011),oct,day(22), check);
+ ymd_date dt2(year(2011),oct,day(22));
     ydoy_date dt(dt2);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
@@ -80,24 +80,24 @@
     BOOST_TEST(dt.to_month()==oct);
     BOOST_TEST(day(to_ymd_date(dt))==22);
   }
- { // construct from ymd: 2011/jan_01
- ymd_date dt2(year(2011),jan_01, check);
+ { // construct from ymd: 2011/jan/day(1, no_check)
+ ymd_date dt2(year(2011),jan/day(1, no_check));
     ydoy_date dt(dt2);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
     BOOST_TEST(dt.to_month()==jan);
     BOOST_TEST(day(to_ymd_date(dt))==1);
   }
- { // no_check construct from ymd: 2011/jan_01
- ymd_date dt2(year(2011),jan_01);
+ { // no_check construct from ymd: 2011/jan/day(1, no_check)
+ ymd_date dt2(year(2011),jan/day(1, no_check));
     ydoy_date dt(dt2);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
     BOOST_TEST(dt.to_month()==jan);
     BOOST_TEST(day(to_ymd_date(dt))==1);
   }
- { // construct from ymd: first day: -32768/jan_01
- ymd_date dt2(year(-32768),jan_01, check);
+ { // construct from ymd: first day: -32768/jan/day(1, no_check)
+ ymd_date dt2(year(-32768),jan/day(1, no_check));
     ydoy_date dt(dt2);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==-32768);
@@ -108,7 +108,7 @@
     std::cout <<"-32768/jan/01 days "<< dt.days_since_epoch().count() << std::endl;
   }
   { // construct from ymd: last day: 32767/dec/31
- ymd_date dt2(year(32767),dec,day(31), check);
+ ymd_date dt2(year(32767),dec,day(31));
     ydoy_date dt(dt2);
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==32767);
@@ -117,7 +117,7 @@
     BOOST_TEST(dt.days_since_epoch().count()==23947853);
     std::cout <<"32767/12/31 days "<< dt.days_since_epoch().count() << std::endl;
   }
-// { // construct from days: first day: -32768/jan_01
+// { // construct from days: first day: -32768/jan/day(1, no_check)
 // ydoy_date dt(days(11322), check);
 // BOOST_TEST( dt.is_valid());
 // BOOST_TEST(year(dt)==-32768);

Modified: sandbox/chrono_date/libs/date/test/dates/ymd/ymd_date_pass.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/test/dates/ymd/ymd_date_pass.cpp (original)
+++ sandbox/chrono_date/libs/date/test/dates/ymd/ymd_date_pass.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -18,37 +18,28 @@
   typedef boost::chrono::high_resolution_clock Clock;
   typedef boost::chrono::duration<double, boost::micro> micros;
 
- std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
   { // construct from ymd: 0/1/1
     ymd_date dt(year(0),jan,day(1));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(days_date(dt).days_since_epoch().count()==11979588);
   }
- std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
   { // unchecked construct from bad ymd: 0/0/0 results in valid date
- ymd_date dt(year(0),month(0),day(0));
- std::cout <<"0/0/0 days "<< days_date(dt).days_since_epoch().count() << std::endl;
+ unchecked::ymd_date dt(year(0),unchecked::month(0),unchecked::day(0));
+ //std::cout <<"0/0/0 days "<< days_date(dt).days_since_epoch().count() << std::endl;
     BOOST_TEST( ! dt.is_valid());
   }
- std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
   { // unchecked construct from bad ymd: 0/0/0 results in valid date
- ymd_date dt(year(40000),month(1),day(1));
- BOOST_TEST( ! year(40000).is_valid());
+ unchecked::ymd_date dt(year(40000),month(1),day(1));
+ //BOOST_TEST( ! year(40000).is_valid());
     BOOST_TEST( dt.is_valid());
   }
-// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
 // { // bad construction from bad days: 0
 // try {
-// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
 // days dd(0);
-// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
 // ymd_date dt(days(0), check);
-// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
 // BOOST_TEST( false );
-// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
 // } catch (...) {}
 // }
- std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
   { // construct from days: 0/1/1
     ymd_date dt(days(11979588));
     BOOST_TEST( dt.is_valid());
@@ -57,7 +48,6 @@
     BOOST_TEST(month(dt)==1);
     BOOST_TEST(day(dt)==1);
   }
- std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
   { // default constructor
     ymd_date dt;
     BOOST_TEST( dt.is_valid());
@@ -66,7 +56,7 @@
     BOOST_TEST(day(dt)==1);
   }
   { // construct from ymd: 2011/oct/22
- ymd_date dt(year(2011),oct,day(22), check);
+ ymd_date dt(year(2011),oct,day(22));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
     BOOST_TEST(month(dt)==oct);
@@ -79,22 +69,22 @@
     BOOST_TEST(month(dt)==oct);
     BOOST_TEST(day(dt)==22);
   }
- { // construct from ymd: 2011/jan_01
- ymd_date dt(year(2011),jan_01);
+ { // construct from ymd: 2011/jan/day(1, no_check)
+ ymd_date dt(year(2011),jan/day(1, no_check));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
     BOOST_TEST(month(dt)==jan);
     BOOST_TEST(day(dt)==1);
   }
- { // no_check construct from ymd: 2011/jan_01
- ymd_date dt(year(2011),jan_01);
+ { // no_check construct from ymd: 2011/jan/day(1, no_check)
+ ymd_date dt(year(2011),jan/day(1, no_check));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==2011);
     BOOST_TEST(month(dt)==jan);
     BOOST_TEST(day(dt)==1);
   }
- { // construct from ymd: first day: -32768/jan_01
- ymd_date dt(year(-32768),jan_01);
+ { // construct from ymd: first day: -32768/jan/day(1, no_check)
+ ymd_date dt(year(-32768),jan/day(1, no_check));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==-32768);
     BOOST_TEST(month(dt)==jan);
@@ -112,7 +102,7 @@
     BOOST_TEST(days_date(dt).days_since_epoch().count()==23947853);
     std::cout <<"32767/12/31 days "<< days_date(dt).days_since_epoch().count() << std::endl;
   }
- { // construct from days: first day: -32768/jan_01
+ { // construct from days: first day: -32768/jan/day(1, no_check)
     ymd_date dt(days(11322));
     BOOST_TEST( dt.is_valid());
     BOOST_TEST(year(dt)==-32768);
@@ -369,13 +359,14 @@
     BOOST_TEST(month(dt)==jan);
     BOOST_TEST(day(dt)==22);
   }
- {
- ymd_date dt(year(2011),jan,day(29));
- try {
- dt+=months(1);
- BOOST_TEST(false);
- } catch (...) {}
- }
+// std::cerr << __FILE__ << ":" << __LINE__ << " " << std::endl;
+// {
+// ymd_date dt(year(2011),jan,day(29));
+// try {
+// dt+=months(1);
+// BOOST_TEST(false);
+// } catch (...) {}
+// }
   {
     ymd_date dt(year(2012),jan,day(29));
     dt+=months(1);
@@ -423,13 +414,13 @@
     BOOST_TEST(month(dt)==feb);
     BOOST_TEST(day(dt)==29);
   }
- {
- ymd_date dt(year(2012),feb,day(29));
- try {
- dt+=years(1);
- BOOST_TEST(false);
- } catch (...) {}
- }
+// {
+// ymd_date dt(year(2012),feb,day(29));
+// try {
+// dt+=years(1);
+// BOOST_TEST(false);
+// } catch (...) {}
+// }
   {
     ymd_date dt(year(2011),oct,day(22));
     dt = dt + years(1);
@@ -458,13 +449,13 @@
     BOOST_TEST(month(dt)==feb);
     BOOST_TEST(day(dt)==29);
   }
- {
- ymd_date dt(year(2012),feb,day(29));
- try {
- dt-=years(1);
- BOOST_TEST(false);
- } catch (...) {}
- }
+// {
+// ymd_date dt(year(2012),feb,day(29));
+// try {
+// dt-=years(1);
+// BOOST_TEST(false);
+// } catch (...) {}
+// }
   {
     ymd_date dt(year(2011),oct,day(22));
     dt = dt - years(1);

Modified: sandbox/chrono_date/libs/date/test/wrappers/day_pass.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/test/wrappers/day_pass.cpp (original)
+++ sandbox/chrono_date/libs/date/test/wrappers/day_pass.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -13,7 +13,7 @@
   {
     try
     {
- day d(0, check);
+ day d(0);
       BOOST_TEST(false && "0 is not a valid day");
     }
     catch (...)
@@ -23,7 +23,7 @@
   {
     try
     {
- day d(32, check);
+ day d(32);
       BOOST_TEST(false && "32 is not a valid day");
     }
     catch (...)
@@ -32,15 +32,15 @@
   }
 #endif
   {
- day d(0);
+ unchecked::day d(0);
     BOOST_TEST(!d.is_valid() && "0 is not a valid day");
   }
   {
- day d(32);
+ unchecked::day d(32);
     BOOST_TEST(!d.is_valid() && "32 is not a valid day");
   }
   {
- day d(-1);
+ unchecked::day d(-1);
     BOOST_TEST(!d.is_valid() && "-1 is not a valid day");
   }
   {

Modified: sandbox/chrono_date/libs/date/test/wrappers/month_pass.cpp
==============================================================================
--- sandbox/chrono_date/libs/date/test/wrappers/month_pass.cpp (original)
+++ sandbox/chrono_date/libs/date/test/wrappers/month_pass.cpp 2013-05-18 08:33:49 EDT (Sat, 18 May 2013)
@@ -10,20 +10,20 @@
 {
   using namespace boost::chrono;
 
- {
+// {
 // try
 // {
-// month d(0, check);
+// month d(0);
 // BOOST_TEST(false && "0 is not a valid month");
 // }
 // catch (...)
 // {
 // }
- }
+// }
 // {
 // try
 // {
-// month d(13, check);
+// month d(13);
 // BOOST_TEST(false && "13 is not a valid month");
 // }
 // catch (...)
@@ -35,11 +35,11 @@
 // BOOST_TEST(!d.is_valid() && "0 is not a valid month");
 // }
   {
- month d(13);
+ unchecked::month d(13);
     BOOST_TEST(!d.is_valid() && "13 is not a valid month");
   }
   {
- month d(-1);
+ unchecked::month d(-1);
     BOOST_TEST(!d.is_valid() && "-1 is not a valid month");
   }
   {


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk