
... And, what should the default constructor do? Create a null uuid or a unique one?
It feels like you are struggling to associate the default constructor with something. :-) You know, you really do not have to. The default constructor has quite a clear meaning. If a class has no functionality matching that meaning, that class should not be defining the default constructor and should not be hijacking that constructor for anything else. Convenient? Sure. Good API? Hmm, I am not sure -- a good interface should be saying what it means.
I also wonder about this usefulness of the default constructor for boost::uuids::uuid. Maybe it should just be left out.
Keep in mind you can't put a uuid into a std container if it isn't default constructible. Regards Hartmut