Look else-thread and you'll find a lot of C-specific
discussion, and a lot of C++-specific discussion.
Concerning what you might do with it *if* it were allowed. The
definition of void, however, is identical in C and in C++, as is
the requirement that a type be complete when you define a
variable using it (and the fact that "extern void x;" is also
illegal, although just declaring a variable doesn't normally
require a complete type).
The difference has been recognized as a defect in the C++
standard, and is being addressed.
Anyway, although your point is irrelevant to the present
discussion (see below), it's not the case that C++ fundamental
types that have corresponding types in C are equivalent to
those C types. In particular the languages differ, as I
recall, in allowing/disallowing padding bits and trap
representations for fundamental types.
No. It's quite clear that both languages allow padding bits and
trap representations in everything but char types. (There may
be a difference with regards to plain char: C definitely allows
trapping representations in plain char; I don't think C++ does.
In practice, it's not an issue, since the trapping
representations can only occur with 1's complement or signed
magnitude representation, and all of the systems using those
representations define plain char to unsigned.)
That's not a type common to C and C++, so the rules for it are
obviously not common in both languages.
This is one thing you can do with 'char' in C++ that
you cannot do with it in C.
And you can make char a member of a class, or have a char
parameter to a template. But how is this relevant to the
semantics of char: char doesn't have any special characteristics
in C++, which would make it incompatible with C, for this.
These are characteristics of references, classes and templates,
not of char. The type char, in C++, is exactly the same as in
C, or it is a bug in the C++ standard. (In this case, I think
that there is a bug, but it's slight, and of no practical
consequences.)