Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-02-04 07:59:34


I think that if we add another template parameter to boost::function,
Storage, with requirements that (1) sizeof(Storage) >= sizeof(void*), (2) an
object of type Storage always has the correct alignment for every type T
such that sizeof(T) <= sizeof(Storage), then (a) the implementation of
boost::function could be simplified, and (b) it will provide nothrow
guarantees for function objects smaller than Storage.

The default Storage would be something similar to max_align_t, i.e.

union default_storage
{
    void * pv;
    void (*pf) ();
    void (A::*pmf) ();
    double d;
// etc

    // bind(&A::f, this)
    struct B
    {
        struct F
        {
            void (A::*pmf2) ();
        } f;

        struct L
        {
            A * p2;
        } l;
    } b;
};

--
Peter Dimov
Multi Media Ltd.

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