Hi Robert After some internal discussion, we have not found an obvious way to not have the extra typedef. Is this a big problem?
Maybe there are other people on the list that are more fluent in C++ and could think of a way to do it? Greetings Hannes On 30 April 2013 07:48, Robert Bradshaw <rober...@gmail.com> wrote: > On Fri, Apr 12, 2013 at 8:04 AM, Hannes Röst > <hroest_nospam2...@quantentunnel.de> wrote: > > Dear mailing list > > > > In the process of developing a rather large Cython project where we wrap > the > > scientific OpenMS library (http://sourceforge.net/projects/open-ms/) > using > > Cython, we have come across an issue with the C++ code that is generated > by > > Cython. The issue is that Cython generates C++ that is not compatible > with the > > Clang compiler. > > > > I hope this is the correct mailing list to report this issue since it > seems to > > be a bug in Cython and not in Clang (after some discussion we have > concluded > > that Clang is most likely correct in rejecting the generated code). > Since we do > > not have access to the issue tracker, we hoped posting our issue here > would > > clear up matters. > > > > The issue occurs with the following minimal testcase: > > > > from libcpp.vector cimport vector as libcpp_vector > > from cython.operator cimport dereference as deref, preincrement as inc > > > > cdef class TestClass: > > > > cdef libcpp_vector[float] inst > > > > def __iter__(self): > > it = self.inst.begin() > > while it != self.inst.end(): > > yield deref(it) > > inc(it) > > > > When compiled with Cython to C++, it generates C++ that cannot be > compiled with > > Clang (however it seems that gcc and MSVS accept the code). It seems > that the > > same issue with Clang was already discussed here: > > https://bugzilla.mozilla.org/show_bug.cgi?id=623303 and the conclusion > was that > > Clang is correct in reporting the code as erroneous. > > > > In the above case, the invalid C++ code that gets generated is: > > > > p->__pyx_v_it.std::vector<float>::iterator::~iterator(); > > > > The correct code for the above case would probably be (this is just a > > suggestion, it compiles with gcc and clang on our machines and our tests > run > > through with it): > > > > typedef std::vector<float>::iterator _it; > > p->__pyx_v_it.~_it(); > > > > > > We have tested it with the 0.18 release as well as the newest 0.19b2 > build from > > github (58131b68dc033fc7ca269d875a2aab2b4e9646a2) and the results were > the > > same. > > Thanks for the report. Can you think of a solution that doesn't > require a special typedef declaration for each type you might want to > call a destructor on? > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > http://mail.python.org/mailman/listinfo/cython-devel >
_______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel