Forward Declarations at the Usage Location

Rule ID:

forward_declaration

Severity:

high

Forward declarations are useful for reducing dependencies and resolving circular references.

Why We Do Not Want Forward Declarations at the Usage Location

Scattering forward declarations throughout the code base makes maintenance harder by introducing hidden dependencies on the original type. When a type is renamed or removed, these declarations are easily forgotten, resulting in difficult-to-diagnose compilation errors.

Correct Solution

In Erbsland Core, every forward declaration has its own header.

For a type Example declared in Example.hpp, create Example_fwd.hpp containing only the forward declaration. Example.hpp must include Example_fwd.hpp so conflicting declarations become immediately visible.

Any code that only requires the forward declaration should include Example_fwd.hpp.

Mechanical Detection

The scanner reports namespace-scope class and struct forward declarations outside _fwd.hpp files. A few false positives are expected.