Boost logo

Boost :

From: Jonathan Turkanis (technews_at_[hidden])
Date: 2004-09-20 12:58:08


"Ben Hutchings" <ben.hutchings_at_[hidden]> wrote in message
news:A7F746377BDB7D4EA8E6623AF92F43C80C7DA6_at_copper.bwsint.com...
> Jonathan Turkanis <technews_at_[hidden]> wrote:
> > "Robert Ramey" <ramey_at_[hidden]> wrote in message

> > > I use
> > >
> > > ....
> > > BOOST_STATIC_ASSERT(sizeof(T) == 0);
> >
> > The expression 'always_false<T>::value' can't be evaluated until
> > the point of instantiation, since always_false could be
> > specialized for T. OTOH, the compiler can tell immediately that
> > 'sizeof(T) == 0' is false, so might it not replace
> > 'sizeof(T) == 0' with 'false', and then issue the same error as
> > in the quoted case?
>
> sizeof(T) isn't always false, because for some types T it isn't
> even well-formed.

Okay -- T could be a function type, for instance.

> As a value-dependent expression I think it must
> not be evaluated until the template is instantiated.

At any rate, if 'sizeof(T) == 0' is not always false, then

    BOOST_STATIC_ASSERT(sizeof(T) == 0);

is not a suitable generic replacement for

   BOOST_STATIC_ASSERT_FALSE(T).

So I'm still in favor of adding BOOST_STATIC_ASSERT_FALSE.

Jonathan


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