I think what you need is a circular buffer of sprites. Use a bidirectional queue of sprites (can be represented by a list, a vector, whatever). Each time one edge of the queue becomes out of the screen, move it to the other edge.
Let's assume you have only one image of the size of the screen, and you want to tile it when scrolling. In this case you need two sprites, one on side of the other.
When the right side of the left sprite is behind the left side of the view, it means it went out of the screen. Thus, overpass that sprite over the one on it's side.
if (spr.GetPosition().x + spr.GetSize().x < viewLeft)
spr.Move(spr.GetSize().x * 2, 0);
If you scroll left, up or down, do a similar test (if scrolling in all directions you need 4 sprites)
GetSize already takes in account the scale, so it should work fine.
If your sprites are smaller than the screen or you want to display more than one sprite in a row, you can do the same with more sprites, using a bidirectional queue. You need only to test the sprite of one of the edges:
sf::Sprite& leftSprite = mySpritesQueue.getLeftSprite();
if (leftSprite .GetPosition().x > viewLeft){
// a hole was created on the left side of the view,
// place the sprite of the right edge of the layer (which is out of the screen) behind the left edge
// (...) respective code here
}else if (leftSprite .GetPosition().x + leftSprite .GetSize().x < viewLeft){
// leftSprite is out of the screen, place it into the other edge of the queue
// (...) respective code here
}
If all sprites are of same size, moving a sprite to the other edge is simply
sprite.Move(sprite.GetSize().x * numSpritesOnTheQueue); // or negative move if moving right edge to the left
Otherwise store the length of the buffer in pixels somewhere.
If you need multiple sprites to tile in all directions you need a circular matrix.