Jaakko Jarvi <[EMAIL PROTECTED]> writes:

> Dear Boosters,
>
> The enable_if library defines the enable_if and disable_if templates,
> which are tools for controlling which function templates are included
> in the overload resolution set based on the properties of the argument
> types.
>
> The following example demonstrates their use:
>
> template <class T>
> typename enable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) { 
>   std::cout << "An arithmetic type\n";
> }
>
> template <class T>
> typename disable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) { 
>   std::cout << "Not an arithmetic type\n";
> }
>

I strongly prefer this interface:

    // enable_if operates on types with a nested ::value
    template <class T>
    typename enable_if<boost::is_arithmetic<T>, void>::type foo(T t) { 
      std::cout << "An arithmetic type\n";
    }

    template <class T>
    typename disable_if<boost::is_arithmetic<T>, void>::type foo(T t) { 
      std::cout << "Not an arithmetic type\n";
    }

    // and enable_if_c operates on integral constants:

    template <class T>
    typename enable_if_c<boost::is_arithmetic<T>::value, void>::type bar(T t) { 
      std::cout << "An arithmetic type\n";
    }

    template <class T>
    typename disable_if_c<boost::is_arithmetic<T>::value, void>::type bar(T t) { 
      std::cout << "Not an arithmetic type\n";
    }

For the sake of MPL compatibility.  It's also nearly always a terser
and more portable usage.

> The directory structure in the tar-ball (or zip-ball) does not fully
> reflect boost directory structure. The library is intended to be part
> of Boost.Utility, and be included as part of including
> "boost/utility.hpp".
>
> There's no Jamfile yet, but there is a Makefile that compiles and runs
> all the tests. Note that GCC 3.2 fails on the test:
>
>   enable_if_no_disambiguation.cpp

Please see the test code and #define (BOOST_NO_SFINAE) in
boost/iterator/detail/config_def.hpp and the workaround code in
boost/iterator/detail/enable_if.hpp

Regards,
Dave

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to