Re: Impossible compilation scenario!! (possible BUG)
"Abdulla Herzallah" <ah@herz.dk> wrote in message
news:Ojyz9xQNIHA.5224@TK2MSFTNGP02.phx.gbl...
It seems that the forward declaration does not work if the class is used
in the inheritance declartion statment
That's true.
the code below (compiled in Native C++ Console application) illustrate it
(as this does not work in VS2008 and that it is the latest compiler I
assume then, that VS2005 will not work either (but I have not tried it on
VS2005)
Nor would/could it in any other compiler.
What I could be missing some compiler directive!!! well please help me
here guys ( I am desperate now)
No, there's no directive to enable what you're trying to so.
The error I keep getting C2504 Base class undefined
No matter what I tried to re-arrange the order of these classes I get the
same error for one of these classes
Ahh... does that not suggest something?
It is indeed a bug, not a compiler bug, but a problem in your design.
below is the complete code (i.e. no .h files to include in the stdfx.h)
#include "stdafx.h"
template<typename T> class Base; // forward declaring Base
class First : Base<First> { }; // >>breaking here as Base class is
undfined<<
template <typename T> class Second: First { };
template<typename T> class Base: Second<T> { };
So, First contains a subobject of type Base<First>
Base<First> contains a subobject of type Second<First>
Second<First> contains a subobject of type First.
Therefore First contains a subobject of type First.
There's no way to accomplish that in finite memory, plus if the inheritance
wasn't private, it would create gobs of ambiguities and potential for
circularly defined function overrides.
You'll have to change your design so that there are no directed cycles in
the inheritance graph.