Boost logo

Boost :

From: Ralf W. Grosse-Kunstleve (rwgk_at_[hidden])
Date: 2004-06-23 11:28:37


With the latest Boost CVS compilation of

boost/libs/python/src/object/inheritance.cpp

with the old IRIX MIPSpro compiler (EDG 238) fails for this code in
boost/boost/graph/properties.hpp:

  namespace detail {
    template<typename VertexBundle, typename EdgeBundle>
        type_traits::yes_type is_vertex_bundle_helper(VertexBundle*);
        
    template<typename VertexBundle, typename EdgeBundle>
        type_traits::no_type is_vertex_bundle_helper(EdgeBundle*);
        
    template<typename VertexBundle, typename EdgeBundle, typename Bundle>
        struct is_vertex_bundle
        {
          BOOST_STATIC_CONSTANT(bool, value =
((sizeof(is_vertex_bundle_helper<VertexBundle, EdgeBundle>((Bundle*)0))
                                                                              
== sizeof(type_traits::yes_type))));
        };
  }

The error is:

cc-1278 CC: ERROR File = /txusr/rwgrosse/hot/boost/boost/graph/properties.hpp,
Line = 363
  No instance of overloaded function "boost::detail::is_vertex_bundle_helper"
          matches the argument list.

            The argument types are: (Bundle *).
          BOOST_STATIC_CONSTANT(bool, value =
((sizeof(is_vertex_bundle_helper<VertexBundle, EdgeBundle>((Bundle*)0))
          ^

I tried to rearrange the code a bit:

  namespace detail {
    template<typename VertexBundle, typename EdgeBundle>
    struct is_vertex_bundle_helper
    {
        static
        type_traits::yes_type get(VertexBundle*);

        static
        type_traits::no_type get(EdgeBundle*);
    };

    template<typename VertexBundle, typename EdgeBundle, typename Bundle>
        struct is_vertex_bundle
        {
          typedef is_vertex_bundle_helper<VertexBundle, EdgeBundle> helper_t;
          BOOST_STATIC_CONSTANT(bool, value =
((sizeof(helper_t::get((Bundle*)0)) == sizeof(type_traits::yes_type))));
        };
  }

This still compiles with other compilers (gcc 3.4 and EDG 245), but
not with the old EDG 238:

cc-1108 CC: ERROR File = /txusr/rwgrosse/hot/boost/boost/graph/properties.hpp,
Line = 368
  The indicated expression must have pointer-to-function type.

          BOOST_STATIC_CONSTANT(bool, value =
((sizeof(helper_t::get((Bundle*)0)) == sizeof(type_traits::yes_type))));
          ^

It doesn't even compile if I simplify the code like this:

cc-1108 CC: ERROR File = /txusr/rwgrosse/hot/boost/boost/graph/properties.hpp,
Line = 371
  The indicated expression must have pointer-to-function type.

          static const std::size_t value1 = sizeof(helper_t::get((Bundle*)0));
                                                   ^

1 error detected in the compilation of
"/txusr/rwgrosse/hot/boost/libs/python/sr

I am lost here. Suggestions for workarounds are very much appreciated.
It used to compile with the CVS from a couple of days ago. It is
important to us to get the IRIX build working again.

Thanks in advance,
        Ralf

P.S.: inheritance.cpp compiles if I simply set
BOOST_STATIC_CONSTANT(bool, value = false);
Therefore I was hopeful that the problem can be fixed by rearranging the code
fragments shown above.

                
__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail


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