As a reminder: Reworking the error handling mechanism is better done before than after the release of SFML 2.
The problem with exceptions thrown across shared library boundaries, seems (according to the quick googling I just did
)not to be a showstopper, as long as (a) SFML is not loaded with LoadLibrary or dlopen and (b) application and library are compiled/linked with the same compiler with the same version, which must be done anyway.
As Nexus
mentioned it works well at least in Boost and other big libraries. The
Boost Filesystem library, which is among the few boost libraries that need to be compiled (also as a shared library!) for example, makes extensive use of exceptions.
But if you absolutely do not want to use exceptions and keep the return codes, a GetLastError/SetLastError mechanism, like Disch proposed would still be a big improvement over the current stream-based system, which makes it very difficult to log the error messages to a file in a customized format (e.g. HTML), display them to the user (in a non-console application), translate them to exceptions yourself, or generally do anything useful with them.
Maybe you could also call a user defined callback, or raise a
signal.