Stefan Behnel, 08.07.2012 20:54: > Lars Buitinck, 08.07.2012 20:38: >> 2012/7/8 Stefan Behnel: >>> """ >>> cpp_operators.cpp: In function ‘void __Pyx_CppExn2PyErr()’: >>> cpp_operators.cpp:442: error: expected unqualified-id before ‘&’ token >>> cpp_operators.cpp:442: error: expected `)' before ‘&’ token >>> """ >>> >>> The failing code line is this: >>> >>> """ >>> } catch (const std::bad_alloc& exn) { >>> """ >> >> Could you check whether the header <new> is included? It should be to >> get the definition of bad_alloc. > > Ah, yes. I'm sure that's it.
... and there also were some more headers missing, so basically, this feature never worked. Great. Here's the complete implementation with the four header files that I had to add at the top: """ #include <new> #include <typeinfo> #include <stdexcept> #include <iostream> static void __Pyx_CppExn2PyErr() { // Catch a handful of different errors here and turn them into the // equivalent Python errors. try { if (PyErr_Occurred()) ; // let the latest Python exn pass through and ignore the current one else throw; } catch (const std::bad_alloc& exn) { PyErr_SetString(PyExc_MemoryError, exn.what()); } catch (const std::bad_cast& exn) { PyErr_SetString(PyExc_TypeError, exn.what()); } catch (const std::domain_error& exn) { PyErr_SetString(PyExc_ValueError, exn.what()); } catch (const std::invalid_argument& exn) { PyErr_SetString(PyExc_ValueError, exn.what()); } catch (const std::ios_base::failure& exn) { PyErr_SetString(PyExc_IOError, exn.what()); } catch (const std::out_of_range& exn) { // Change out_of_range to IndexError PyErr_SetString(PyExc_IndexError, exn.what()); } catch (const std::overflow_error& exn) { PyErr_SetString(PyExc_OverflowError, exn.what()); } catch (const std::range_error& exn) { PyErr_SetString(PyExc_ArithmeticError, exn.what()); } catch (const std::underflow_error& exn) { PyErr_SetString(PyExc_ArithmeticError, exn.what()); } catch (const std::exception& exn) { PyErr_SetString(PyExc_RuntimeError, exn.what()); } catch (...) { PyErr_SetString(PyExc_RuntimeError, "Unknown exception"); } } """ Back to this question then: > Are there any side-effects in that header > file, or would it be ok to always include it in C++ mode when the above > exception conversion function is used? Does it make sense to always include these four headers, or should we try to handle the exceptions conditionally? Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel