
AMDG Marco <mrcekets <at> gmail.com> writes:
On Thu, 19 Apr 2007 23:10:31 +0200, Michael Marcin <mmarcin <at> method-solutions.com> wrote:
I want to enable a function templated on a type T if a function it relies on overloaded on that type.
How about? template<class T> yes is_overloaded(T); template<class T> no is_overloaded(...); #define BOOST_IS_OVERLOADED(t, name) \ (sizeof(is_overloaded<t>(name)) == sizeof(yes)) No that doesn't work either. If there are multiple functions the compiler won't know which one to pass to is_overloaded(...) Um. Since you are looking for the exact signature (untested): namespace detail { namespace is_overloaded_adl_barrier { typedef chr no; struct yes { no dummy[2]; }; struct no_overload {}; yes is_overloaded_impl(...); no is_overloaded_impl(const no_overload&); struct any_conversion { template<class T> any_conversion(const T&); }; no_overload atan2(any_conversion, any_conversion); template<class T> T make(); template<class T> struct has_atan2 : mpl::bool_< sizeof(is_overloaded_impl(atan2(make<T>(), make<T>()))) == sizeof(yes)
{}; } using is_overloaded_adl_barrier::has_atan2; } In Christ, Steven Watanabe