Тип 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, это отдельные типы со сложным названием.