Boost logo

Boost :

Subject: [boost] [MPL] "Unwrap" metafunction
From: Robert Kawulak (robert.kawulak_at_[hidden])
Date: 2011-12-29 16:52:12


Hi,

I need a metafunction to check if a type is wrapped as an argument of a
template and "unwrap" it if so. Something like:

    template <template <typename> class T, typename C>
    struct unwrap {
        typedef C type;
        static const bool is_wrapped = false;
    };

    template <template <typename> class T, typename C>
    struct unwrap<T, T<C>> {
        typedef C type;
        static const bool is_wrapped = true;
    };

So both unwrap<x, int>::type and unwrap<x, x<int>>::type are int, while
unwrap<x, y<int>>::type is y<int>. Of course I can use the code above, but
I'm just curious - does Boost.MPL already provide a utility that can be used
to achieve the same?

Thanks and best regards,
Robert


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