0

Let's say I have a piece of code like this:

// Foo.h:
class Incomplete; // the forward-declaration
class Foo {
  void bar(Incomplete&); // doesn't really matter
};
// Foo.cpp:
class Incomplete : private Baz {
};
void Foo::bar(Incomplete&) {
}

Is forward-declaring classes like in Foo.h standard-compliant? If it is, since which language version? What about the same for protected inheritance?

passing_through
  • 1,778
  • 12
  • 24

1 Answers1

5

A forward declaration of a class is required to omit inheritance. You cannot write

class Incomplete : private Baz;

even if you wanted to.

The purpose of a forward declaration is to simply indicate that a particular name in a particular namespace refers to a class. Specifying the base class is part of the definition since it gives information about the class's layout in memory.

Brian Bi
  • 111,498
  • 10
  • 176
  • 312