Couldn't you just require the template argument explicitly, i.e. string.asUtfX<32>()?
I think you misunderstood the point. When calling, for example, string.asUtf8(), what should be returned? Maybe the user will need a std::basic_string<sf::Uint32>, or a QString, or a GString, or even a MyCustomUtf8String, etc. I can handle the first one, but not the others.
However there's a chance that the target type has a generic fromUtf32 function.
However I wouldn't mix "to" and "as", you already use toAnsiString() and toWideString().
True. The inconsistency with sf::Time will have to wait for SFML 3