|
Boost : |
From: Peder Holt (peder.holt_at_[hidden])
Date: 2005-09-01 03:59:37
On 9/1/05, David Abrahams <dave_at_[hidden]> wrote:
> Eric Niebler <eric_at_[hidden]> writes:
>
> > Ah. But the fact remains that remove_pointer et al. are indeed broken on
> > VC6 and VC7, and the regression tests bear this out.
> >
> > http://tinyurl.com/8fs7w
> >
> > IMO, the best path is to preserve the meaning of
> > BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION for compilers without
> > PTS. That is, it still defines full specializations of the type traits
> > templates. But the typeof implementation should be what the primary
> > template uses for compilers without PTS. That way, everything that is
> > working now, keeps working with no change in performance.
>
> I think it would better to do some actual speed testing there. After
> all, using the typeof hack *could* turn out to be much faster and use
> fewer resources than doing it the other way.
>
> It's a pretty easy test.
I don't think using the typeof library directly is the best idea. When
using typeof, you represent each type by a number, limiting you to
~1000 types.
Here, though, we have more information. In stead of using an integral
number to 'register' a type, we can use the input type:
template<typename InputType>
struct msvc_extract_type
{
struct id2type;
};
template<typename RegisteredType, typename InputType>
struct msvc_register_type : msvc_typeof_base<InputType>
{
struct msvc_typeof_base<InputType>::id2type // This uses
nice VC6-VC7 bugfeature
{
typedef RegisteredType type;
};
};
Later:
template<typename U>
struct remove_pointer {
template<typename T>
msvc_register_type<T,remove_pointer<T*> > remove_ptr_fn(T* (*)())
static U test_function();
enum {register_type=sizeof(remove_ptr_fn(test_function))};
typedef typename msvc_extract_type<remove_pointer<U> >::id2type::type type;
};
I'll try to get a version up and going with this implementation very soon.
Regards,
Peder
>
> --
> Dave Abrahams
> Boost Consulting
> www.boost-consulting.com
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk