¿C ++ clase abstracta sin funciones virtuales puras?

Tengo una clase base

class ShapeF
{
public:
    ShapeF();
    virtual ~ShapeF();

    inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }

protected:
    Vector2 mPosition;
}

Obviamente con algún código omitido, pero entiendes el punto. Utilizo esto como plantilla, y con algunos enums divertidos (ommited), una forma de determinar qué tipo de forma estoy usando

class RotatedRectangleF : public ShapeF
{
public:
    RotatedRectangleF();
    virtual ~RotatedRectangleF();
protected:
    float mWidth;
    float mHeight;
    float mRotation;
}

ShapeF hace su trabajo con el posicionamiento, y una enumeración que define cuál es el tipo. Tiene accesores y mutadores, pero no tiene métodos.

¿Puedo hacer que ShapeF sea una clase abstracta, para asegurar que nadie intente y cree una instancia de un objeto de tipo ShapeF?

Normalmente, esto es factible teniendo una función virtual pura dentro de ShapeF

//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;

Sin embargo, actualmente estoy tratando con colisiones en una clase separada. Puedo moverlo todo, pero me pregunto si hay una manera de hacer que una clase sea abstracta ... sin las funciones virtuales puras.