I've just noticed that the following code might be missleading:

boost::optional<int> opt;
opt = 0;
std::cout << opt;

It's a known bug, but there's a patch to fix it in Trac: https://svn.boost.org/trac/boost/ticket/2103
 
Ok, I see now...
Thank you.