|
Boost : |
Subject: [boost] [Review] Boost.Type Traits Extension by Frederic Bron
From: Joachim Faulhaber (afojgo_at_[hidden])
Date: 2011-03-18 06:29:09
2011/3/18 Frédéric Bron <frederic.bron_at_[hidden]>:
>> I've found some problems. In the ICL I have an
>> operator +
>>
>> template <class Type>
>> inline typename enable_if
>> <is_associative_element_container<Type>, Type>::type
>> operator + (Type object, const Type& operand);
>>
>> and is seems that more overloads are checked valid as actually exist.
>> Is this intentional?
>>
>> BOOST_AUTO_TEST_CASE(has_op_extension_qualifiers)
>> {
>> typedef int T;
>> typedef interval_set<T> IntervalSetT;
>> typedef IntervalSetT::interval_type IntervalT;
>>
>> // This is supposed to succeed
>> BOOST_CHECK((has_operator_plus<IntervalSetT, const IntervalSetT&,
>> IntervalSetT>::value));
>>
>> BOOST_CHECK((!is_convertible<const IntervalSetT&, IntervalSetT&>::value));
>>
>> // These are supposed to fail, but they succeed
>> BOOST_CHECK((has_operator_plus<IntervalSetT, IntervalSetT&,
>> IntervalSetT>::value));
>> BOOST_CHECK((has_operator_plus<IntervalSetT, IntervalSetT,
>> IntervalSetT>::value));
>> BOOST_CHECK((has_operator_plus<IntervalSetT, IntervalSetT,
>> IntervalSetT const&>::value));
>> }
>
> Your question here is the same as the following example:
>
> struct T { };
> struct RET { };
>
> RET f(T, const T&) { return RET(); }
> void g(RET) { }
> void h(const RET&) { }
>
> int main() {
> //Does this work?
> { T t1; const T &t2=t1; g(f(t1, t2)); } // -> yes
> { T t1; T &t2=t1; g(f(t1, t2)); } // -> yes
> { T t1; T t2; g(f(t1, t2)); } // -> yes
> { T t1; T t2; h(f(t1, t2)); } // -> yes
> return 0;
> }
>
> What it means it that has_operator_plus<LHS, RHS, RET> does not check
> for exact conformance of arguments LHS and RHS but checks if you can
> use LHS and RHS as arguments to the operator.
understood.
Doesn't this mean, that the naming
has_operator_xxx
is imprecise and should be
operator_xxx_applicable_to
or
operator_xxx_callable_on
instead?
Joachim
-- Interval Container Library [Boost.Icl] http://www.joachim-faulhaber.de
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk