Boost logo

Boost :

From: Ralf W. Grosse-Kunstleve (rwgk_at_[hidden])
Date: 2006-03-13 15:51:15


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

> The compiler is correct. Instead of quoting C++ Standard, I'll quote
> Lippman C++ Primer, 3rd edition, p.113:
>
> An object of an enumeration type can be be initialized and
> assigned only with another object of the same enumeration
> type or with one of its set of enumerators. For example,
> although 3 is a legal value associated with Points, it cannot
> be explicitly assigned to a Points object:
> [...]
> enum Points { point2d = 2, point2w, point3d = 3, point3w };
> // error: pt2w initialized with int
> Points pt2w = 3;

Thanks!

> Btw, you'd get the same compilation error with any EDG-based
> compiler. On Tru64, for example:

Indeed. I have the same compiler. I should have checked before.

Obviously I've reduced the problem a bit too much.

Boost.Python (with the very same boost version from CVS) compiles fine with the
Tru64 cxx compiler, but aCC gives this error (fragment of output):

aCC -o boost/libs/python/src/converter/builtin_converters.o -c -AA +W2837
-DBOOST_DISABLE_THREADS -DNDEBUG -O -DBOOST_PYTHON_MAX_BASES=2
-DBOOST_PYTHON_SOURCE -I/home1/tmaier/dist/boost -Ipython/include/python2.4
-I/home1/tmaier/dist/python/include/python2.4
boost/libs/python/src/converter/builtin_converters.cpp
...
"boost/boost/mpl/aux_/integral_wrapper.hpp", line 45: error #2144: a value of
type "long" cannot be used to initialize an entity of type "const
boost::numeric::udt_builtin_mixture_enum"
      BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N);
      ^
          detected during:
            instantiation of class "mpl_::integral_c<T, N> [with
T=boost::numeric::udt_builtin_mixture_enum, N=0L]" at line 30 of
"boost/boost/numeric/conversion/detail/meta.hpp"
The full output is here:

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

The problem can be reduced like this:

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

unsigned long long
foo()
{
  return boost::numeric_cast<unsigned long long, long>(0L);
}

This compiles with Tru64 cxx:

% cxx -std strict_ansi -c -I$dist/boost numeric_cast.cpp
cxx: Warning: numeric_cast.cpp, line 3: the type "long long" is nonstandard
unsigned long long
--------------^
cxx: Warning: numeric_cast.cpp, line 6: the type "long long" is nonstandard
  return boost::numeric_cast<unsigned long long, long>(0L);
-------------------------------------------^

But not with aCC:

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

Could this be fixed with a few extra #ifdefs?

Cheers,
        Ralf

BTW: Is the aCC compiler somehow related to the Tru64 compiler?

__________________________________________________
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