The IWYU (Include What You Use) rules would actually say to do this the other way. You should still either:
- Forward declare them if you don't need them 'in size'.
- Include the header that declares them if you do need them in-size.

Relying on picking it up from message.h means that if somewhere down the line message.h changed what it included, suddenly this file would break. That sort of spooky-action-at-a-distance effect is best avoided when possible.