
Seems like the following specialization of impl<> works: template <typename r> struct impl<true, r(void)> { static const bool value = sizeof( return_value_check<type, r>::deduce( ( (((derived_type*)0)->operator()(), details::void_exp_result<type>()) ) ) ) == sizeof(yes); }; -Roshan From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Roman Perepelitsa Sent: Monday, February 02, 2009 1:57 AM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Using SFINAE to detect presence of member function - Unreliable 2009/1/31 Naik, Roshan <roshan.naik@hp.com<mailto:roshan.naik@hp.com>>
Maybe this one does what you need: http://groups.google.com/group/comp.lang.c++.moderated/tree/browse_frm/threa...
Thanks Roman. It is kind of amazing! Both has_member<> and is_call_possible<> are very interesting (even if a bit ugly). But is_call_possible doesn't seem to work for member functions that don't have any arguments. I tried twiddling with the implementation a bit and no luck yet. Sorry, I don't know how to make it work for functions without arguments. Problem is that this program is invalid: void foo() {} void foo(...) {} int main() { foo(); // Ambiguous. } Roman Perepelitsa.