Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cout << getIsTrue< isX<int8>::ikIsX >() << endl;
- cout << getIsTrue< isX<uint8>::ikIsX >() << endl;
- cout << getIsTrue< isX<char>::ikIsX >() << endl;
- #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 <> bool getIsTrue<FalseType>() { return false; }
- int main(int, char **t )
- {
- cout << sizeof(int8) << endl; // 1
- cout << sizeof(uint8) << endl; // 1
- cout << sizeof(char) << endl; // 1
- cout << getIsTrue< isX<int8>::ikIsX >() << endl;
- cout << getIsTrue< isX<uint8>::ikIsX >() << endl;
- cout << getIsTrue< isX<char>::ikIsX >() << endl;
- cout << getIsTrue< isX<int32>::ikIsX >() << endl;
- cout << getIsTrue< isX<uint32>::ikIsX >() << endl;
- cout << getIsTrue< isX<int>::ikIsX >() << endl;
- }
Add Comment
Please, Sign In to add comment