Здравствуйте, Bork, Вы писали:
B>Здравствуйте коллеги,
B>он компилируется и работает как ожидается в GCC (4.8.1 +) и в MSVC 2013. B>Но надо MSVC 2010, в которой компиляция падает с ошибкой:
B>error C2794: '_Type' : is not a member of any direct or indirect base class of 'C'
B>как убедить компилятор, не определяя специализаций всех возможных видов do_something для типа В?
на MSVC 2010 проверить не могу. попробуй:
template< typename T > struct is_B { enum { value = 0 }; };
template< typename T > struct is_B< B< T > > { enum { value = 1 }; };
template <class T> void do_something ( typename std::enable_if< is_B< T >::value, T >::type val );
Здравствуйте, night beast, Вы писали:
NB>или это не совсем то, что хотелось?
К сожалению это не то (типы Т и B<Y> никак не связаны вообще, кроме того что T содержит B<Y> как поле структуры), но за идею спасибо, поковыряю в этом направлении ..
Здравствуйте, Bork, Вы писали:
NB>>или это не совсем то, что хотелось?
B>К сожалению это не то (типы Т и B<Y> никак не связаны вообще, кроме того что T содержит B<Y> как поле структуры), но за идею спасибо, поковыряю в этом направлении ..
Здравствуйте, Bork, Вы писали:
B>Здравствуйте коллеги, B> ... B>как убедить компилятор, не определяя специализаций всех возможных видов do_something для типа В?
А обязательно использовать именно std::enable_if, вместо обычной специализации?
Здравствуйте, Chorkov, Вы писали:
C>Здравствуйте, Bork, Вы писали:
B>>Здравствуйте коллеги, B>> ... B>>как убедить компилятор, не определяя специализаций всех возможных видов do_something для типа В?
C>А обязательно использовать именно std::enable_if, вместо обычной специализации?
Не обязательно, просто обычных специализаций получится под сотню, вместо одного шаблона с std::enable_if. Жаль что требования обязывают поддерживать 2010 студию...