|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2004-12-24 11:50:52
Agoston Bejo wrote:
> It seems to me that eval_if doesn't use lazy evaluation either. The error
> message quite obviously refers to an attempt of the compiler to evaluate the
> expression on the 'false' branch, whereas the condition (is_arithmetic<int>)
> is true to my best knowledge.
eval_if uses lazy evaluation to the extent possible: it accepts two
nullary metafunctions and invokes one of them depending on how the
condition evaluates. Your code computes T::value_type immediately,
before either metafunction can be invoked.
No library can change the properties of the C++ language.
You only need to make a metafunction that gets the value_type and use
that with eval_if:
template <class T>
struct get_value_type
{ typedef typename T::value_type type; };
template <class T>
struct value_type
: eval_if<is_arithmetic<T>, identity<T>, get_value_type<T> >
{};
HTH,
-- Dave Abrahams Boost Consulting http://www.boost-consulting.com
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net