$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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");
   }
   {