Currently, SFML loads glyphs "directly" without translating a unicode codepoint to a glyph index first. If SFML would do that, it would realize that a glyph isn't available since FreeType maps unavailable glyphs to a special "unavailable glyph" index, 0. If you try to load the glyph at index 0 you will get the famous box texture everybody knows.
What this means is that no matter whether you load 1 character that isn't available or another, they will all map to the same texture data, the box. It is unfortunate that SFML doesn't make use of this fact because glyph texture data is mapped with the codepoint as the key and not the glyph index. Maybe this will change in the future
.
For now, a nice "workaround" you could use is to simply compare the texture data of a glyph you want to try loading to a glyph that is known not to exist e.g. the NUL character with codepoint 0. If they compare equal, you know that that glyph isn't available and you can take the corrective measures you mentioned. Obviously doing this a lot could lead to performance issues, so caching the result would be recommended.