Not to wade into this debate too deeply, but can't our top-level API accept std::string and then call `std::string.c_str()` when needed for HDF5?  Alternatively, couldn't we overload, a la:

```c++
Hdf5Back::Hdf5Back(std::string path)
{
  Hdf5Back::Hdf5Back(path.c_str());
}

Hdf5Back::Hdf5Back(const char* path)
{
  // real implementation
}
```