I have found a possible contradiction in
the working draft of standard C++.
First I present the facts, and my question comes at the end.
In the page 74, when the integer conversion ranks are stablished,
in 6.8.4. line (1.1) says
"No two signed integer types [...] shall have the same integer conversion rank, even if they have the same representation".
In 6.8.1. line 8 (page 71) says:
"Type wchar_t is a distinct type that has an implementation-defined signed or unsigned integer type as its underlying type".
Finally, in 6.8.4. line (1.8) says:
"The ranks of char8_t, char16_t, char32_t, and wchar_t shall equal the ranks of their underlying types (6.8.1)."
In case that
wchar_t be implemented as a signed integer type,
it would have the same rank as its underlying type,
which is a distinct type of some other integer type.
Thus, we have two different signed integer types with identical rank,
in contradiction with 6.8.1. (1.1).
Is this an actual contradiction,
or I am misunderstanding when two trivially copyable types are distinct types in C++?