
Edward Diener <eldiener@tropicsoft.com> writes:
I will continue to look for a workaround for VC9 and earlier, as I think my library should be usable by VC9, VC8, and perhaps VC7.1. Thanks for your neat solution for VC10 !
The following works with VC8, VC10 and g++ 4.4. It causes an Internal Compiler Error with VC7.1 though :-( #include <iostream> typedef char small_type; struct large_type { small_type dummy[2]; }; template<bool,typename T> struct enable_if; template<typename T> struct enable_if<true,T> { typedef T type; }; template<typename T,typename DT> struct has_member_cMem_of_type { template<typename U> static small_type check2(DT (U::*)); template<typename U> static large_type check2(U); template<typename U> static typename enable_if< sizeof(check2(&U::cMem))==sizeof(small_type), small_type>::type has_matching_member(int); template<typename U> static large_type has_matching_member(...); static const bool value=sizeof(has_matching_member<T>(0))==sizeof(small_type); }; struct Gipf { }; struct Dvonn { Gipf cMem; }; struct Tzaar { int cMem; }; struct Yinsh { int Zertz; void cMem(); }; struct Derived: Dvonn {}; int main() { std::cout<<"one:" <<has_member_cMem_of_type<Dvonn, Gipf>::value<<std::endl; std::cout<<"two" ": "<<!has_member_cMem_of_type<Dvonn, int>::value<<std::endl; std::cout<<"three" ": "<<!has_member_cMem_of_type<Tzaar, Gipf>::value<<std::endl; std::cout<<"four" ": "<< has_member_cMem_of_type<Tzaar, int>::value<<std::endl; std::cout<<"five" ": "<<!has_member_cMem_of_type<Yinsh, Gipf>::value<<std::endl; std::cout<<"six" ": "<<!has_member_cMem_of_type<Yinsh, int>::value<<std::endl; std::cout<<"seven" ": "<<has_member_cMem_of_type<Derived, Gipf>::value<<std::endl; std::cout<<"eight" ": "<<!has_member_cMem_of_type<Derived, int>::value<<std::endl; } Anthony -- Author of C++ Concurrency in Action http://www.stdthread.co.uk/book/ just::thread C++0x thread library http://www.stdthread.co.uk Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk 15 Carrallack Mews, St Just, Cornwall, TR19 7UL, UK. Company No. 5478976