[Boost-bugs] [Boost C++ Libraries] #3654: Functions created via make_getter don't seem to use converters

Subject: [Boost-bugs] [Boost C++ Libraries] #3654: Functions created via make_getter don't seem to use converters
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2009-11-21 05:16:54


#3654: Functions created via make_getter don't seem to use converters
-----------------------------------------------+----------------------------
 Reporter: John Wiegley <jwiegley@…> | Owner: dave
     Type: Bugs | Status: new
Milestone: Boost 1.42.0 | Component: Python
  Version: Boost 1.40.0 | Severity: Problem
 Keywords: |
-----------------------------------------------+----------------------------
 I have a converter registered for a boost::optional<amount_t> object. If
 I use it as follows, my code works just fine:

  boost::optional<amount_t> py_price(annotation_t& ann) {
    return ann.price;
  }

  class_< annotation_t > ("Annotation")
    .add_property("price", py_price)
    ;

 However, if I dispense with the intermediary and use make_getter, I get an
 exception stating that no conversion exists for optional<amount_t>:

  class_< annotation_t > ("Annotation")
    .add_property("price", make_getter(&annotation_t::price))
    ;

 The attached file demonstrates this bug using Boost 1.40 and Python 2.6.1.
 I'm running it on OS X 10.6.2 with g++ 4.4.2. My steps were:

 g++-mp-4.4 -I/usr/include/python2.6 -I/usr/local/include/boost-1_40 -o
 bug.so bug.cc -L/usr/local/lib -lboost_python-xgcc44-d-1_40 -lpython
 -shared

 $ python
 import bug
 x = bug.Annotation()
 x.price2
 # This works just fine
 x.price
 # This causes an abort() due to terminate()

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/3654>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:01 UTC