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:

    *(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.


Boost list run by bdawes at, gregod at, cpdaniel at, john at