http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56658
Bug #: 56658
Summary: Silent conversion between 'char' and 'int' even though
there are 'signed char' and 'unsigned char'
alternatives
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Consider code snippet:
#include <stdio.h>
typedef signed char int8_t;
typedef unsigned char uint8_t;
void foo(int8_t x)
{
printf("Cartman");
}
void foo(uint8_t x)
{
printf("Stan");
}
void foo(int x)
{
printf("Kenny");
}
int main(int argc, char ** argv)
{
char person = '?';
printf("Oh my God they killed ");
foo(person);
printf("! You bastards!\n");
}
It does compile and generate 0 warnings. Yes, we all know how 'wise' was former
creators of the standard when it came to char. But in this case, if compiler
can't figure out 'char' is 'signed char' there is still an ambiguity. And
silent conversion of 'char' to 'int' is just wrong. As far as I can judge,
clang guys just pathetically copy-pasted GCC's behavior. What I ask for is at
least warning message there.