Fix build on gcc < 4.7

This commit is contained in:
Shea Levy 2014-10-20 12:15:50 -04:00
parent f040159f77
commit 6062b12160
2 changed files with 16 additions and 0 deletions

View file

@ -340,6 +340,9 @@ struct InvalidPathError : EvalError
{ {
Path path; Path path;
InvalidPathError(const Path & path); InvalidPathError(const Path & path);
#ifdef EXCEPTION_NEEDS_THROW_SPEC
~InvalidPathError() throw () { };
#endif
}; };
/* Realise all paths in `context' */ /* Realise all paths in `context' */

View file

@ -8,6 +8,15 @@
#include <boost/format.hpp> #include <boost/format.hpp>
/* Before 4.7, gcc's std::exception uses empty throw() specifiers for
* its (virtual) destructor and what() in c++11 mode, in violation of spec
*/
#ifdef __GNUC__
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
#define EXCEPTION_NEEDS_THROW_SPEC
#endif
#endif
namespace nix { namespace nix {
@ -39,8 +48,12 @@ protected:
public: public:
unsigned int status; // exit status unsigned int status; // exit status
BaseError(const FormatOrString & fs, unsigned int status = 1); BaseError(const FormatOrString & fs, unsigned int status = 1);
#ifdef EXCEPTION_NEEDS_THROW_SPEC
~BaseError() throw () { }; ~BaseError() throw () { };
const char * what() const throw () { return err.c_str(); } const char * what() const throw () { return err.c_str(); }
#else
const char * what() const noexcept { return err.c_str(); }
#endif
const string & msg() const { return err; } const string & msg() const { return err; }
const string & prefix() const { return prefix_; } const string & prefix() const { return prefix_; }
BaseError & addPrefix(const FormatOrString & fs); BaseError & addPrefix(const FormatOrString & fs);