Hi, Allowing to build dates that are not validated doesn't mean that they are not valid. A validated date is always valid. E.g date d(year(2013), may, day(5)); d is not a validated date but is valid. Having a is_validated() function in addition to is_valid() could have its uses assert( ! d.is_validated() && d.is_valid() ); is_validated() function forces to use a bit to store this information on the date representation, but it improves the performances of the is_valid() function. Moving from a possible unvalidated to a validated one would need date d1; ... date d2(d1.year(), d1.month(), d1.day(), check); Instead of this a validate factory makes this clearer date d1; ... date d2 = validate(d1); date validate(date const& dt) { if (dt.is_validated()) return *this; else if (dt.is_valid()) { date res(dt); res.set_validated_(); // this is private return res; } throw bad_date(); } Best, Vicente