Boost logo

Boost :

Subject: Re: [boost] New, powerful way to use enable_if in C++0x
From: Daniel Frey (d.frey_at_[hidden])
Date: 2011-04-13 04:14:34


On 11.04.2011, at 20:15, Matt Calabrese wrote:

> However, in C++0x, there is a new way to use enable_if by altering neither
> the function parameter list nor the specification of the return type. It can
> be used with operators, constructors, variadic function templates, and even
> overloaded conversion operations (the latter of which was previously
> considered impossible). The way to do it is with C++0x default function
> template parameters.

That's really nice, but I think the syntax might be improved. How about adding a ::value to enable_if (and the other templates) to allow your example to look like this:

  template< class... T, bool = boost::enable_if_c< sizeof...( T ) == 10 >::value >
  test( T&&... );

  template< class T, bool = boost::enable_if< boost::is_arithmetic< T > >::value >
  operator T() const;

etc.? Get rid of typename, *&, boost::enabler and if you like, you can write 'bool Enabled = ...' instead of 'bool = ...' to be more verbose in your code. Of course, ::value is non-existent if the condition of enable_if is not met, it is not false. I made a quick test with gcc 4.6.0 and it seems to work fine. Plus it allows extending the existing enable_if without breaking anything (AFAICS).

Regards, Daniel


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