Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct short2
- {
- short x;
- short y;
- };
- struct short3
- {
- short x;
- short y;
- short z;
- };
- #define CREATE_MEMBER_DETECTOR(X) \
- template<typename T> class Detect_##X { \
- struct Fallback { int X; }; \
- struct Derived : T, Fallback { }; \
- \
- template<typename U, U> struct Check; \
- \
- typedef char ArrayOfOne[1]; \
- typedef char ArrayOfTwo[2]; \
- \
- template<typename U> static ArrayOfOne & func(Check<int Fallback::*, &U::X> *); \
- template<typename U> static ArrayOfTwo & func(...); \
- public: \
- typedef Detect_##X type; \
- enum { value = sizeof(func<Derived>(0)) == 2 }; \
- };
- CREATE_MEMBER_DETECTOR(x);
- CREATE_MEMBER_DETECTOR(y);
- CREATE_MEMBER_DETECTOR(z);
- int main()
- {
- std::cout << Detect_z<short2>::value << std::endl;
- std::cout << Detect_z<short3>::value << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement