Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-05-22 08:15:51

"Arkadiy Vertleyb" <vertleyb_at_[hidden]> writes:

> "David Abrahams" <dave_at_[hidden]> wrote
>> >> Okay, how about the one enclosed here, then?
>> >
>> > Now you have both size() and size_<> instantiated LIMIT_SIZE times ;-)
>> According to Eric, you need something like size_<> to workaround vc++
>> bugs, though.
> Not if the expression is simplified. It's really multiple calls to sizeof
> what drives the compiler crazy.
>> Okay, let me try one more. I think this one gets close
>> to the minimal number of instantiations required to work around VC++
>> bugs.
> Still, select<> is instantiated LIMIT_SIZE times...

Yes, but not LIMIT_SIZE * N, where N is the number of different types
passed to BOOST_TYPEOF. So it's a one-time cost, which is better than
what I posted earlier.

> The beauty of the ugly solution with the conditional operator is that it
> brings the algorithm complexity, in terms of template instantiations, to
> O(m), where m is the real size of the vector. True, we pay by doubling the
> amount of template lookups, and expression evaluations, but it looks like it
> pays.


> It's a pity that VC8 chokes on this in some contexts -- maybe we'll be able
> to get MS to fix it before the real thing comes out.

Yes, I have got one of their engineers working on it :)

> Until then, I believe we should specialcase the VC8, and I think
> your first suggestion, with no separate size function will do the
> job fine.

I think my latest is better.

> We could even limit this to dependent contexts, since I don't think this
> problem exists outside templates. However your other suggestion, that
> allows to remove _TPL, makes this impossible. Still, I love the idea of
> removing _TPL so much that I am willing to pay this price...


Dave Abrahams
Boost Consulting

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