
on Mon May 26 2008, "Joachim Faulhaber" <afojgo-AT-googlemail.com> wrote:
Hi!
My first goal in boostifying my proposed interval template library (ITL http://sourceforge.net/projects/itl) was to provide good examples for interval_sets and interval_maps using boost::date_time objects. This was much harder than I had expected, because incidentally the most important syntactical and semantical requirements that I do rely on for a parameter T of itl::interval<T> are not provided by boost::date_time.
The one property of boost::date_time that knocked my socks off was the default constructor that 'is-not-a-date-time'. I paraphrase this as: boost::time is lacking a big bang ;-)
Default constructors in nearly all the types that I've seen in my lifetime (I know the realm of my unknown unknowns is vast ;-) are intended to be elements of the type they do construct.
Well, sure, but the built-ins in C++ generally default construct as singular "degenerate" elements that you can assign to and destruct, and nothing else.
Moreover in so many cases including built in types, default ctors serve as *initial elements*. Other elements can be *reached* from T() applying operations of T on them.
This applies to all built in types
You must be thinking of value-initialization. Please read http://www.boost.org/doc/libs/1_35_0/libs/utility/value_init.htm
and many std::types, like e.g. string, set, list etc. The most simple instance is unsigned int() with increment operation ++ that resembles the Peano axiomatic operations 0 and successor for natural numbers.
This semantics of default ctors, at least in common built in and standard types and also in so many user defined types is so fundamental that I took it as a *semantical invariant* for the construction of my library.
Having a singular value definitely weakens the invariant of a type, but that doesn't make it an invalid approach. It just means the invariant is broader than it would be otherwise, and includes the possibility of this singular value. -- Dave Abrahams BoostPro Computing http://www.boostpro.com