I just looked at the API docs, and I may have (probably have) missed something, but it may be nice to provide a function/operator to convert a RectangleShape into a ConvexShape (and similarly with a CircleShape). Quite a low-priority feature, I might say, but what do you think about this possibility?
Why woud one need such a feature?
And don't forget that shape classes are just helpers, you're free to create your own shapes, either derived from sf::Shape or even from scratch with vertex arrays. Don't be limited by SFML classes, they are just there to provide simple features for simple use cases.
There are cases where one wants to construct a specialized shape, but after that, just use it generically as convex shape -- similar to the old factory functions that returned a single type. Thor contains such a function
sf::ConvexShape toConvexShape(const sf::Shape&);
It is not strictly necessary, but a little bit more convenient that
sf::Shape pointers which have no value semantics. Although I could also use
aurora::CopiedPtr<sf::Shape> to give them value semantics
But if it's necessary for SFML, is a different question. At the moment I'm not even sure how much of the Shape functionality will remain in Thor -- some parts seem to be very specific, maybe I'll remove them or provide them as examples.
I too think RectangleShape should inherit from ConvexShape, just because a rectangle is a convex shape.
That's not the only criterion for inheritance, take a look at the Liskov Substitution Principle.