Boost logo

Boost :

From: Peder Holt (peder.holt_at_[hidden])
Date: 2005-02-26 14:12:46


I was looking through the FOR_EACH - implementation, and noticed that
it lacks rvalue detection for Visual C++ 6.0.
After some investigation, I have found one very sleazy way of
detecting rvalue-ness runtime without evaluating the argument more
than once:

# define BOOST_FOREACH_TYPEOF(COL)
         \
    *(true ? 0 : &::boost::for_each::wrap(COL))

template<typename T>
inline static_any<simple_variant<T const> > contain(int const&
position_test,T const &t, bool const &, mpl::false_)
{
    int rvalue_test=int(&t)-int(&position_test);
    bool rvalue=(rvalue_test<=8);

    return rvalue ? simple_variant<T const>(t) : simple_variant<T const>(&t);
}

Since this relies on the position of objects on the stack, there are
probably cases where it will fail.
Pointers (e.g. string constants) must be handled separately.

Regards
Peder


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