Boost logo

Boost :

Subject: Re: [boost] [review][constrained_value] Review ofConstrainedValueLibrary begins today
From: Robert Kawulak (robert.kawulak_at_[hidden])
Date: 2008-12-05 22:31:52


> From: vicente.botet

> >> I would prefer
> >> to have two separated hierarchies, one for constrained values
> >> that preserv its constraints, error handling, ... staticaly,
> >> and one for those tyhe constraint can be changed at runtime.
> >
> > I wouldn't prefer to have two separate hierarchies with
> almost identical
> > functionality and differing only in details.
>
> Well we can have a single type that cover with the whole
> domain, but we will need more metaprogramming.

We already have a single type that covers both static and dynamic constraints,
so what is the point? Did I misunderstood something?

> I expect that a constrained integer will have the same size
> as an int, i.e. sizeof(int). Which is the size of an instance
> of the constrained class?

Here are some examples:

GCC 4.3.2:

        4 = sizeof (int)
        4 = sizeof (bounded_int<int, 0, 128>::type)
        12 = sizeof (bounded<int, int, int>::type)
        4 = sizeof (constrained<int, is_even>)

MSVC 8.0 SP1:

        4 = sizeof (int)
        8 = sizeof (bounded_int<int, 0, 128>::type)
        20 = sizeof (bounded<int, int, int>::type)
        8 = sizeof (constrained<int, is_even>)

I don't know why MSVC cannot opimise the size as well as GCC, but anyway the
library allows for perfect size optimisation with some compilers.

> See below one possible implementation of static_constrained.
> Of course, the implementation is not complete.
[snip]
> typedef static_constrained<even_traits> even_type;
>
> int main() {
> even_type a(2);
> std::cout << "sizeof(even_type)=" << sizeof(even_type) <<
> std::endl;
> even_type b(1); // throws
> }

So how is this different from:

        typedef constrained<int, is_even> even_type;

?

Best regards,
Robert


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk