For mask/flag, I would prefer `unsigned`.
missing `const`.
I think it may be simpler to just override `supports*`, no ?
Nothing for C++11 ? (or something to detect which standard is used) ?