KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The code below compiles, but has different behavior for the char type than for the int types. In particular cout << getIsTrue< isX<int8>::ikIsX >() << endl; cout << getIsTrue< isX<uint8>::ikIsX >() << endl; cout << getIsTrue< isX<char>::ikIsX >() << endl; result in 3 instantiations of templates for three types: int8, uint8 and char. What gives? The same is not true for ints: int and uint32 which result in the same template instantiation, and signed int another. The reason seems to be that C++ sees char, signed char and unsigned char as three different types. Whereas int is the same as a signed int. Is this right or am I missing something? #include <iostream> using namespace std; typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; typedef signed long long int64; typedef unsigned long long uint64; struct TrueType {}; struct FalseType {}; template <typename T> struct isX { typedef typename T::ikIsX ikIsX; }; // This int==int32 is ambiguous //template <> struct isX<int > { typedef FalseType ikIsX; }; // Fails template <> struct isX<int32 > { typedef FalseType ikIsX; }; template <> struct isX<uint32 > { typedef FalseType ikIsX; }; // Whay isn't this ambiguous? char==int8 template <> struct isX<char > { typedef FalseType ikIsX; }; template <> struct isX<int8 > { typedef FalseType ikIsX; }; template <> struct isX<uint8 > { typedef FalseType ikIsX; }; template <typename T> bool getIsTrue(); template <> bool getIsTrue<TrueType>() { return true; } template <
Tags (comma-separated)
Save Edits
Cancel