"Peter Dimov" <[EMAIL PROTECTED]> writes:

> David Abrahams wrote:
>> Jaakko Jarvi <[EMAIL PROTECTED]> writes:
>>
>>> Where we've used enable_if, it has been very common that the
>>> condition is not just a single traits lookup, but rather a logical
>>> expression, e.g.:
>>>
>>> template <class T, class U>
>>> typename enable_if<is_matrix<T>::value &&
>>> is_vector<U>::value,...>::type operator*(const T& t, const U& u);
>>>
>>> So definitely, this version of enable_if is needed.
>>
>> really?
>>
>>     template <class T, class U>
>>     typename enable_if<mpl::and<is_matrix<T>, is_vector<U>
>>     >,...>::type operator*(const T& t, const U& u);
>>
>> looks better to me.
>
> Sorry, no. If you deny me a non-broken enable_if

Calling the version I want "broken" is quite extreme, and I ask you
to justify it.

> I'll just write one myself. I am not going to uglify my expressions

Clearly the ugliness is a matter of opinion.  I think the usage with
mpl::and_ is much prettier.

> for no good reason.

That aside, there are good reasons to do it my way:

    * Almost always terser

    * Works with more compilers

    * Results in fewer template instantiations (mpl::and_<...> does
      short-circuit instantiation)

    * enable_if<_1, _2> is a valid lambda expression

What am I forgetting?  I'm sure there are a few others.

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

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

Reply via email to