There is an Object class with a clone() function that can throw a CloneNotSupportedException* and is declared such. CloneNotSupportedException derives from Exception, which derives from Object.
Inheritance requires complete types, and we have two of them, so it’s obvious we can’t break the circular dependency there. Member pointers and pointer parameters are content with incomplete types, but this is seemingly not enough for throw declarations, even if we throw pointers.
Class definitions are separate from implementations, forward declarations are used, pointers everywhere. This is still not enough.
Is there any way to break this dependency, or is this impossible in C++?
Skip the exception specification, it’s worthless.
Done.
By the way, your design sounds so utterly wrong, I can’t bring myself to not comment on it.