Тип char не является ни signed, ни unsigned?

#include <iostream>
#include <type_traits>
 
int main() {
    if constexpr (std::is_signed_v<char>) {
        std::cout << std::is_same_v<char, signed char>;
    } else {
        std::cout << std::is_same_v<char, unsigned char>;
    }
}

Почему этот код выводит 0? Как char может быть ни одним, ни другим? Это же логику нарушает!


Ответы (1 шт):

Автор решения: Герман Борисов

По историческим причинам тип char стоит несколько особняком. В стандарте прописано, что он может не совпадать ни с signed char ни с unsigned char.

Закон исключения третьего тут не работает, потому что signed char и unsigned char - это не char с пометкой signed/unsigned, это отдельные типы со сложным названием.

→ Ссылка