2009/3/25 Michał Nowotka <mmm...@gmail.com>: > And one more question - what about user-defined exceptions? > Suppose I have following code from library which I cannot modify: > > namespace faif > > { > > > class FaifException : public std::exception { > > public: > > FaifException(){} > > virtual ~FaifException() throw() {} > > virtual const char *what() const throw() { return > "FaifException"; } > > > virtual std::ostream& print(std::ostream& os) const throw(); > > }; > > class UserBreakException : public FaifException { > > public: > > UserBreakException(){} > > virtual ~UserBreakException() throw() {} > > virtual const char *what() const throw(){ return "UserBreak > exception"; } > > > virtual std::ostream& print(std::ostream& os) const throw(); > > }; > > (...) > > } > > This causes following warnings: > > WARNING: char const * faif::UserBreakException::what() const [member function] >> warning W1046: The virtual function was declared with empty throw. Adding >> the ability to override the function from Python breaks the exception >> specification. The function wrapper can throw any exception. In case of >> exception in run-time, the behaviour of the program is undefined!
I think this one is self-explained. > WARNING: std::ostream & faif::UserBreakException::print(std::ostream & > os) const [member function] >> warning W1049: This method could not be overriden in Python - method returns >> reference to local variable! The text should be different: This method could not be overriden in Python - method returns *non const* reference. In such cases, Boost.Python doesn't have place to store the temporal variables. > WARNING: std::ostream & faif::UserBreakException::print(std::ostream & > os) const [member function] >> warning W1046: The virtual function was declared with empty throw. Adding >> the ability to override the function from Python breaks the exception >> specification. The function wrapper can throw any exception. In case of >> exception in run-time, the behaviour of the program is undefined! > Should I exclude this declarations or there is another solution? (I am > not sure excluding it may be called 'solution'...) You may ignore them. > BTW - Why warnings doesn't provide information form what header file > particular warning was generated? Because there was not demand to such functionality. A patch is welcome. > BTW2 - How to exclude the whole class from generation? c = mb.class_( <...> ) c.exclude() I suggest you to take a look on the following document: http://www.language-binding.net/pyplusplus/troubleshooting_guide/exceptions/exceptions.html HTH -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig