Boost logo

Boost :

From: David B. Held (dheld_at_[hidden])
Date: 2002-09-05 13:59:41


"Anthony Williams" <anthwil_at_[hidden]> wrote in message
news:15733.50724.159000.285126_at_gargle.gargle.HOWL...
> [...]
> I can see the point, but this is undefined behaviour --- you are returning
> a reference to a temporary, which as gone out of scope.

Good point. So we can just drop in a default singleton, which saves
us a construction anyway, and make the behaviour defined. ;)

    // Requirements:
    // Ptr must define element_type
    // Ptr must provide an implicit conversion to bool
    // Ptr::element_type must be default-constructible
    template <class Ptr>
    typename Ptr::element_type const& safe_dereference(Ptr p)
    {
        typedef typename Ptr::element_type element_type;
        static element_type default_element;
        return p ? *p : default_element;
    }

    // Requirements:
    // T must be default-constructible
    template <typename T>
    T const& safe_dereference(T* p)
    {
        static T default_T;
        return p ? *p : default_T;
    }

Dave


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