Boost logo

Boost :

From: Aleksey Gurtovoy (alexy_at_[hidden])
Date: 2001-06-23 12:33:23

 Douglas Gregor wrote:
> It appears that, even though STLport has a conforming
> allocator, MSVC won't allow use of it. The 'rebind'
> member template, which is conspicuously absent
> from the standard library that ships with MSVC, cannot be
> used so far as I can tell. The standard usage (template
> parameters Allocator and T):
> typedef typename Allocator::template rebind<T>::other
> t_allocator_type;
> causes an internal compiler error. I was not able to find a
> real workaround.

This should work, but please don't tell anybody that I am the author of this
"code" :).

namespace detail {
template<class T>
struct msvc_never_true
    struct fake_type;
    BOOST_STATIC_CONSTANT(bool, value =
        (boost::is_same<T, fake_type>::value)

template<typename Allocator, typename T>
struct foo
    template<bool> struct Allocator_wrapper : Allocator {};
    template<> struct Allocator_wrapper<true> : Allocator
        template<class> struct rebind;
    typedef typename Allocator_wrapper<
>::template rebind<T>::other allocator_type;

It's not even a legal C++, but MSVC seems to be much more happy with it than
with the original construct... anyway, it works, and I can even try to
explain why, but only if you _really_ want to know :). Failures on
constructs like this were real showstoppers to implementing 'boost::mpl' on
MSVC, until I found the above workaround. In fact, 'boost::mpl' library uses
the workaround often enough to define a macro which encapsulates it
(BOOST_MPL_DEPENDENT_TEMPLATE_TYPEDEF, 'boost/mpl/mpl_config.hpp' header
from the
archive). May be it's worth to be moved to 'boost/config.hpp' (with an
appropriate name change). Code that uses the macro still won't be very

template<typename Allocator, typename T>
struct foo
    typedef typename rebind_result::other allocator_type;

but at least this way we can keep a particular hack that was used to make
this thing work in one place (BTW, I wonder if it still works under MSVC 7.0
beta 2, anyone?).


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