It's not guaranteed to be null terminated, though. The documentation for [RegQueryValueEx](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911\(v=vs.85\).aspx) says:

 > To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the [RegGetValue](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724868\(v=vs.85\).aspx) function.

Since it may not be null-terminated, and since it may have multiple trailing `'\0'` ("If the data has the `REG_SZ`, `REG_MULTI_SZ` or `REG_EXPAND_SZ` type, this size includes any terminating null character or characters unless the data was stored without them"), I would suggest trimming them off the end so the `sf::String` doesn't contain trailing `'\0'`s (otherwise `sf::String::getSize()` would include the trailing `'\0'`s if they're included, which I don't think most people want).

It would be nice if `sf::String` had constructors for taking an additional `std::size_t` specifying the length of the `const char*`/`const wchar_t*`, because then an intermediate `std::basic_string` wouldn't be necessary.

I'm personally in favor of using `TCHAR`/`std::basic_string<TCHAR>` and avoiding `std::string`/`std::wstring`, but if you wanted to use `wchar_t`/`std::wstring` then I'd suggest using `RegQueryValueExW` too to enforce the Unicode-ness.