|
Boost : |
From: Steven Watanabe (steven_at_[hidden])
Date: 2007-11-19 13:37:29
AMDG
Corrado Zoccolo <czoccolo <at> gmail.com> writes:
> I think SFINAE is not enough to replicate faithfully the rules employed by
> the compiler to select the which operator new is called for an expression
> like new T(a1,..,an) . It will look not only in T, but also in its base
> classes.
I don't understand. Both "new T" and has_new<T> look in base
classes of T. SFINAE seems to work on both msvc 8.0 and gcc 3.4.4
I think that what I would do is create a generic allocator
that looks up the correct operator new/delete
template<class T, bool = has_new<T>::value>
struct my_allocator;
template<class T>
struct my_allocator<T, true> {
T* allocate(std::size_t n) {
return(T::operator new(n * sizeof(T)));
}
void deallocate(T* victim, std::size_t n) {
return(T::operator delete(victim, n * sizeof(T)));
}
//...
};
template<class T>
struct my_allocator<T, false> {
T* allocate(std::size_t n) {
return(::operator new(n * sizeof(T)));
}
void deallocate(T* victim, std::size_t n) {
return(::operator delete(victim));
}
//...
};
In Christ,
Steven Watanabe
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk