I am working on a bounding box/collision detection system and I am using different types of bounding volumes, id like all the bounding volumes to derive the same base class and then using pure virtual functions forcing all derived classes to implement basic functions like

* `isCollidingWith(BoudingBox)`

But here is what giving me trouble: I wan't them to implement a function for every `BoudingVolume` type. So if I have a bounding box and a bounding sphere, both the sphere class and the box class should implement

* `isCollidingWith(BoundingBox)`
* `isCollidingWith(BoundingSphere)`

If i then create a new BoundingVolume like `BoundingCylinder` (by deriving from the base class), i want the compiler to throw an error until BoundingBox and BoundingSphere has implemented the `isCollidingWith` function for the new `Cylinder` type (and ofc until the `Cylinder` has implemented the `isCollidingWith` for the `Box`, `Sphere` and the `Cylinder`.

Im not sure on how to go about implementing this, but I thought about using CRTPs.
Is this even possible?