-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Peter Dimov
Andy Little wrote:
What is the problem with the result of plus
being int_ ? How does the specification of mpl::plus look like in your proposed model?
I don't think *this* it is necessarily difficult to implement as Andy would
prefer. However, global application (to the MPL) of the underlying concept
represents a major refactoring and the result would most likely be a lot slower.
Dave was referring to the sequence identity problem because it is exactly the
same kind of thing.
There is a dinstinction between types on which metaprogramming operates (such as
'int' or 'const MyClass') and the types of metaprogramming constructs
themselves. The latter need only be structurally compatible with the concept
(i.e. the archtype or the Plutonic form of the structure). If the MPL starts
making guarantees that metatypes (e.g. a 'vector', a 'list', an 'int_<A>') can
be used as a non-metatype, it will lead to either 1) a combinatorial explosion
of code or 2) a drastic efficiency hit (because the library will be explicitly
rewriting structures after they are built).
Granted, if this was done for integral wrappers only, the combinatorial
explosion wouldn't be too terribly bad. IMO, you don't need wrappers for every
integral type in this domain, you only need an integer wrapper (around 'long'),
a natural wrapper (around 'unsigned long'), and a Boolean (around 'bool').
*But*, it still comes down to a more fundamental issue.... Should the library
endorse the use of the types of metaprogramming constructs themselves as
non-metatypes? I'd say it shouldn't. If you need that for 'int_' (e.g.)
then say 'int_