Boost logo

Boost :

From: Steven Watanabe (steven_at_[hidden])
Date: 2007-04-19 22:26:04


Marco <mrcekets <at>> writes:

> On Thu, 19 Apr 2007 23:10:31 +0200, Michael Marcin
> <mmarcin <at>> 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 :
    sizeof(is_overloaded_impl(atan2(make<T>(), make<T>()))) ==


using is_overloaded_adl_barrier::has_atan2;


In Christ,
Steven Watanabe

Boost list run by bdawes at, gregod at, cpdaniel at, john at