instead of keeping a seperate bool to flag the presence
of a 'dummy' trivial value, use boost::optional instead,
which avoids having to create a 'dummy', and which avoids
the corresponding bookkeeping. This fixes the longstanding
warning about hiding virtual functions, as the instance
which caused the warning isn't instantiated anymore...
replace a deprecated std::auto_ptr with std::unique_ptr