Opened 13 years ago

Closed 13 years ago

#3654 closed Bugs (invalid)

Functions created via make_getter don't seem to use converters

Reported by: John Wiegley <jwiegley@…> Owned by: Dave Abrahams
Milestone: Boost 1.42.0 Component: python USE GITHUB
Version: Boost 1.40.0 Severity: Problem
Keywords: Cc:

Description

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()

Attachments (1)

bug.cc (2.5 KB ) - added by John Wiegley <jwiegley@…> 13 years ago.
Simple case that demonstrates the issue

Download all attachments as: .zip

Change History (2)

by John Wiegley <jwiegley@…>, 13 years ago

Attachment: bug.cc added

Simple case that demonstrates the issue

comment:1 by John Wiegley <jwiegley@…>, 13 years ago

Resolution: invalid
Status: newclosed

This is answered by the Boost.Python FAQ.

Note: See TracTickets for help on using tickets.