Boost logo

Boost :

From: Christoph Ludwig (cludwig_at_[hidden])
Date: 2004-06-25 04:48:37


On Thu, Jun 24, 2004 at 05:51:15PM +0200, Daniel Frey wrote:
> Robert Ramey wrote:
> >BOOST_STATIC_ASSERT(false)
>
> This *should* work. IMHO, if it doesn't, we should fix it, not work
> around it like Michiel suggested.

BOOST_STATIC_ASSERT(false) expands to a typedef that does not contain
any dependent expression. I didn't check the detailed rules in my copy
of the template book by Vandevoorde and Josuttis, but I think a
compiler should check this typedef even if the function template is
not instantiated.

> >However, its doesn't work
> >with compilers that are too smart for their own good. In order to make
> >this
> >work I need something like:
>
> Which compiler and which version of boost and the Compiler are you
> using? Can you provide a minimal but complete example? Also, you might
> want to have a look at checked_delete where we had similar problems in
> the past IIRC.

Try the following program:

  #include <boost/static_assert.hpp>
  
  template <typename T>
  void f(T t) {
  #ifdef DEPENDENT_ASSERT_CONDITION
    BOOST_STATIC_ASSERT(sizeof(T) && false);
  #else
    BOOST_STATIC_ASSERT(false);
  #endif
  }
  
  #ifdef INSTANTIATE_F
  void g(int i) {
    f(i);
  }
  #endif

g++ 3.3.1 accepts it unless you define INSTANTIATE_F.
g++ 3.4.0 rejects it unless you define DEPENDENT_ASSERT_CONDITION (and
don't define INSTANTIATE_F, of course).

I don't know if my solution (sizeof(T) && false) has any
(dis-)advantages compared to Michiel's solution ((T*) 0).

Regards

Christoph

PS: Ramey, I patched your serialization library (based on
    serialization18.zip) such that g++ 3.4 compiles the
    examples. Besides above problem and the many errors due to the
    unqualified use of dependent names I had to work around a bug in
    libstdc++v3 (PR#16154). But I didn't have the time yet for
    extensive tests.
    If you are interested then I can send you my patches.

-- 
http://www.informatik.tu-darmstadt.de/TI/Mitarbeiter/cludwig.html
LiDIA: http://www.informatik.tu-darmstadt.de/TI/LiDIA/Welcome.html

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