mdio::Dataset::Open("HelloWorld.mdio", mdio::constants::kOpen); does not (should not) compile.
Generally this shouldn't be an issue, but for trivial cases and one-offs it is poor UX.
Expand the S template to accept convertible.
Coerce the parameter internally to become std::string.