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

Reply via email to