If flags(empty_t) were not declared explicit, I could do the following:
void f(int x, flags::flags f = flags::empty);
Instead of:
void f(int x, flags::flags f = flags::flags(flags::empty));
..which of course is repetitive and more verbose.
Not a huge deal but maybe worth changing unless there is a more important reason for it to be explicit.
Thanks for the library by the way, I find it quite useful!