What version of SFML are you using? Not too long ago we've had an improvement to the inaccuracy of
sf::sleep, which is the cause of the issue here. I think it's already included in SFML 2.1, but I'm not certain - might want to look at the commit history.
Overall the framelimit with
sf::sleep will always be a bit inaccurate, so if possible one should use VSync, but since that can be deactivated in the driver, one will still want to use framelimit.
Nexus implemented for Zloxx II an interesting idea, where you measure the frametime in the beginning and if it's not at the desired point, you can move the framelimit up. That way you could start with a fixed 60 limit and if the measured time is too far away from 1/60, you could move the limit up (or down) a bit to get closer to 60fps.
I suppose this is quite inaccurate
float fps = 1.f / c.restart().asSeconds();
You should rather try:
int fps = 1000000 / c.restart().asMicroseconds();
It's not really that inaccurate given that we're dealing with frametimes of 0.008 - 0.01s and don't care too much about the microseconds. And if you want to be accurate than your integer division isn't the best way to go about it either...