As others already mentioned, this is impossible. However the library itself can provide forwarding headers to maintain API compatibility while providing forward declarations. Unfortunately not many libraries do this, including the standard library (except for iosfwd).

On 20 February 2024 09:49:08 GMT, Frederick Virchanza Gotham via Std-Proposals <> wrote:
I had a header file "record.h" something like as follows:

class IDevice;
int Record( IDevice * );

I put in a forward declaration for 'IDevice, because I didn't want to
include the header file that defines 'IDevice' for two reasons:
(1) To reduce compile time
(2) To avoid a circular dependency

This worked fine until the person who maintained 'IDevice' did the
following inside "IDevice.hpp":

template<bool temp_param_record>
class Interface {
static consteval bool record(void) noexcept { return
temp_param_record; }

typedef Interface<true> IDevice;

So now any source file that does the following:

#include "IDevice.h"
#include "record.h"

fails to compile. So I propose that the following be valid C++:

class Monkey;

int Func(Monkey *const p)
return nullptr == p;

class Donkey {
int number;

typedef Donkey Monkey;

int main(void)
Monkey obj;

I propose that we should be able to do a forward declaration of a
typedef'ed class.
Std-Proposals mailing list