Boost logo

Boost :

From: Ralf W. Grosse-Kunstleve (rwgk_at_[hidden])
Date: 2006-03-13 22:31:02


--- Boris Gubenko <Boris.Gubenko_at_[hidden]> wrote:

> I can reproduce the problem compiling your program example against
> boost CVS HEAD. I also confirmed, that the program compiles cleanly
> with cxx V6.5-042 on Tru64 and with Intel's ICC 9.0 on Linux.

Yes, we have been using Boost.Python with Tru64 cxx for many years
now.

> > Could this be fixed with a few extra #ifdefs?
>
> I'll take a look tomorrow.

That would be fantastic.

> > BTW: Is the aCC compiler somehow related to the Tru64 compiler?
> >
> They both use the EDG front end.

We are successfully working with EDG 238, 245, 304. This makes me
hopeful that it is "just" a matter of finding the right switches.

I spent the better part of today beating on this. Unfortunately
I did't get too far, but at least I have this:

#include <boost/numeric/conversion/cast.hpp>

void
foo()
{
#ifdef ALL_FAIL
  boost::mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, 0L> bar;
#else
  boost::numeric::convdetail::get_subranged<
    boost::numeric::convdetail::get_conversion_traits<
      unsigned long, long>::target_type,
    boost::numeric::convdetail::get_conversion_traits<
      unsigned long, long>::source_type
>::udt_builtin_mixture bar;
#endif
}

The code in the ALL_FAIL fails both with cxx and aCC, as expected.
I got the code from the aCC error message produced by compiling
the pre-processed code in the #else branch, i.e.:

  aCC -AA -I../boost -E numeric_cast.cpp | & sed 's/^#/\/\//' >
numeric_cast_pp.cpp
  aCC -AA numeric_cast_pp.cpp -c

The full output from the last command is here:

  http://cci.lbl.gov/~rwgk/tmp/hp_ux_aCC_error_2006_03_13_1922

The code in the #else branch above compiles cleanly with cxx. I.e.
somehow aCC arrives at 0L for the second integral_c<> template
parameter, but cxx does not.

My primary goal was to hunt down where the #ifdefs where the two
platforms differ. I noticed that the two compilers use different
branches in

  /boost/mpl/aux_/lambda_support.hpp

cxx uses to shortcut near the top, aCC uses the longer code after the
#else. I changed the #ifdef around so that both compilers use the
shortcut near the top, but that didn't make a difference, at least
not for compiling the small fragment above.

This is all I know so far. I hope Aleksey and Dave will take a look,
in case it is something obvious to them.

Cheers,
        Ralf

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com


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