C doesn't promise that a .hpp file can be #include'd -- unique
mappings are promised only for (up to) 6-characters followed by a
single character.
Note that this is, and has been since 1999:
"The implementation shall provide unique mappings for sequences
consisting of one or more letters or digits (as defined in 5.2.1)
followed by a period (.) and a single letter. The first character
shall be a letter. The implementation may ignore the distinctions of
alphabetical case and restrict the mapping to eight significant
characters before the period."
So it now 8 characters, and the standard now includes three standard
headers that have more than six significant characters before the
period: <complex.h>, <stdbool.h>, and <inttypes.h>
Other than the standard headers, C places no restrictions at all on
the contents of <h_char_sequence> or "q_char_sequence" in a #include
directive. If between them the implementation and underlying platform
map them into a file "that can be processed by the application", it
causes the replacement of the directive by the entire contents of the
file.
If the sequence does not match a standard header and does not map to
the name of a file that can be processed by the application, it is a
constraint error and a diagnostic is required.
As per above, C doesn't promise that .rh files are usable either.
Perhaps you are thinking of some other programming language, such
as C++?
I don't really see what C++ has to do with it.
Even under MS-DOS, in fact even under CP/M 80, I could expect:
#include "filename.rh"
....to do what I wanted, assuming there was a file named filename.rh in
the implementation-defined search path. Although AFAIK there was
never a C90 conforming implementation for CP/M 80.