Gennadiy Rozental wrote:
> > > 2. Top level const requirement on bounded types.
> > > It's unreasonable. I should be able to define variant with const
> > > types. It will be as usable as usual constant types are. The only
> > > requirements that we may incur is that if one types is const,
> > > rest should be also.
> >
> > It's actually not unreasonable: one of the primary goals of variant is
> > to match the semantics of its bounded types as closely as possible. The
> > prohibition on top-level const types, then, is quite reasonable.
> >
> > To see, consider the following:
> >
> >   const int i = 3;
> >   i = 4; // error
> >
> >   variant<const int> v;
> >   v = 4; // error?
> >
> > If top-level const types *were* allowed, then the assignment would
> > succeed. Itay and I decided such was highly undesirable. Let me know if
> > you disagree with the above reasoning.
>
> If I understood you properly you having problem with the following code
> successful compilation:
>
> template<typename T>
> struct A
> {
>     char buf[4];
>
>     template<typename Arg>
>     void
>     operator=( Arg const& arg )
>     {
>         new (buf) T(arg);
>     }
> };
>
> int main() {
>     A<const int> a;
>
>     a = 4;
> }
>
> This wouldn't happened if you use reinterpret cast based implementation,
but
> probably do not want to rely on it. What I would do is to explicitly
> prohibit some operations using static asserts for top level const type
> situation. It wouldn't cost you anything and allow to support this usage
> case.

I think you misunderstand: What I'm arguing is that the "usage case" you
propose here is itself erroneous. This is *not* an issue of whether I can
implement the behavior. (In fact, I need to do additional work to prohibit
it.)

Let me know if you still disagree.

Thanks,
Eric



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to