Boost logo

Boost :

From: Ralf W. Grosse-Kunstleve (rwgk_at_[hidden])
Date: 2008-03-21 18:53:21


Hi Frank,

Your patch resolves the error I posted before, but there are still other,
similar errors while compiling other Boost.Python sources. I think this
is the problem:

shared_ptr.hpp:
        if(del_wrapper) del = del_wrapper->get_deleter<D>();
                                                      ^^^
                                                      ^^^
I think gcc 3.2 doesn't support this syntax. In the old days this was a
common problem. The usual workaround is to use a type holder. See the
patch below, which resolves all my compilation errors.

Ralf

P.S.: I bet there must be a central type holder in boost somewhere, but I
couldn't find it.

Index: shared_ptr.hpp
===================================================================
--- shared_ptr.hpp (revision 43744)
+++ shared_ptr.hpp (working copy)
@@ -633,6 +633,8 @@
 
 #endif
 
+template <class T> struct sp_dw_type_holder { typedef T type; };
+
 class sp_deleter_wrapper
 {
     shared_ptr<const void> _deleter;
@@ -649,7 +651,7 @@
         _deleter.reset();
     }
     template<typename D>
- D* get_deleter() const
+ D* get_deleter(sp_dw_type_holder<D> const&) const
     {
         return boost::detail::basic_get_deleter<D>(_deleter);
     }
@@ -663,7 +665,7 @@
     if(del == 0)
     {
         detail::sp_deleter_wrapper *del_wrapper = detail::basic_get_deleter<detail::sp_deleter_wrapper>(p);
- if(del_wrapper) del = del_wrapper->get_deleter<D>();
+ if(del_wrapper) del = del_wrapper->get_deleter(detail::sp_dw_type_holder<D>());
     }
     return del;
 }


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