A such language could otherwise be constructed by interpreting the source as C if it's not valid C++ and interpret it as C++ if it's not valid C and interpret it as C/C++ if it's valid for both. This requires that code that are both valid C and C++ could conformingly be interpreted the same (undefined behaviour in one language and defined behavior in the other could fx be interpreted the same).
I know there's at least one construct that is valid in both and not interpreted the same. The preprocessor has predefined macros that differ in C and C++, so for example:
int fubar(void)
{
#ifdef __cplusplus
return 1;
#else
return 0;
#endif
}
which is valid for both, but have different meaning.