Boost logo

Boost :

Subject: Re: [boost] enable_if question
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-05-08 12:02:54


On Tue, 8 May 2012, John Maddock wrote:

> Folks I'm having some difficulties understanding the subtleties of enable_if,
> consider:
>
> using namespace boost;
>
> template <unsigned B>
> struct dummy
> {};
>
> template <unsigned B, class Integer>
> typename boost::enable_if<mpl::and_<is_signed<Integer>,
> mpl::bool_<(sizeof(Integer) <= sizeof(long))> > >::type bar(dummy<B>&, const
> Integer&)
> {
> }
> template <unsigned B, class Integer>
> typename boost::enable_if<mpl::and_<is_unsigned<Integer>,
> mpl::bool_<(sizeof(Integer) <= sizeof(long))> > >::type bar(dummy<B>&, const
> Integer&)
> {
> }
>
> Then calling:
>
> dummy<2> d;
> bar(d, 2);
>
> Leads to an ambiguity between the two overloads (both gcc and VC++10), how
> can that be?

The code works for me (as written above) on GCC 4.7 (both with -m32 and
-m64 on x86-64, and with -std=c++98 and -std=c++0x, -ansi -pedantic). I
don't see a reason that it would be ambiguous.

-- Jeremiah Willcock


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk