From 2a7b341c716feda13ec7388f8799df6395ff9405 Mon Sep 17 00:00:00 2001 From: Carsten Larsen Date: Sun, 5 Aug 2018 21:41:11 +0200 Subject: [PATCH] Support GCC 7 & C++11 --- src/main.cpp | 30 ++++++++++++++++++++++++------ src/mathi.h | 4 ++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6b270bd1..f8705e6f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -57,11 +57,29 @@ void operator delete[] (void* ptr) { FreeMemSafe(ptr); } /* GCC 3+ */ #if (__GNUC__ > 2) +/* C++11 */ +#if __cplusplus > 199711L #include -void* operator new (size_t size) throw(std::bad_alloc) { return AllocMemSafe(size); } -void* operator new[] (size_t size) throw(std::bad_alloc) { return AllocMemSafe(size); } -void operator delete (void* ptr) throw() { FreeMemSafe(ptr); } -void operator delete[] (void* ptr) throw() { FreeMemSafe(ptr); } +void* operator new (std::size_t size) { return AllocMemSafe(size); } +void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept { return AllocMemSafe(size); } +void* operator new[] (std::size_t size) { return AllocMemSafe(size); } +void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept { return AllocMemSafe(size); } +void operator delete (void* ptr) noexcept { FreeMemSafe(ptr); } +void operator delete (void* ptr, const std::nothrow_t& nothrow_constant) noexcept { FreeMemSafe(ptr); } +void operator delete[] (void* ptr) noexcept { FreeMemSafe(ptr); } +void operator delete[] (void* ptr, const std::nothrow_t& nothrow_constant) noexcept { FreeMemSafe(ptr); } +#else +/* C++98 */ +#include +void* operator new (std::size_t size) throw (std::bad_alloc) { return AllocMemSafe(size); } +void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw() { return AllocMemSafe(size); } +void* operator new[] (std::size_t size) throw (std::bad_alloc) { return AllocMemSafe(size); } +void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) throw() { return AllocMemSafe(size); } +void operator delete (void* ptr) throw() { FreeMemSafe(ptr); } +void operator delete (void* ptr, const std::nothrow_t& nothrow_constant) throw() { FreeMemSafe(ptr); } +void operator delete[] (void* ptr) throw() { FreeMemSafe(ptr); } +void operator delete[] (void* ptr, const std::nothrow_t& nothrow_constant) throw() { FreeMemSafe(ptr); } +#endif #endif /* MSVC++ */ @@ -82,11 +100,11 @@ void WriteOutInt(int value) { printf("%i", value); } int main(int argc, char** argv) { #if defined(WITHTEST) - if (argc == 2 && StrIsEqual(argv[1], "test")) + if (argc == 2 && StrIsEqual(argv[1], "--test")) { Program = new TestProgram(false); } - else if (argc == 2 && StrIsEqual(argv[1], "testz")) + else if (argc == 2 && StrIsEqual(argv[1], "--testz")) { Program = new TestProgram(true); } diff --git a/src/mathi.h b/src/mathi.h index ddfe0064..13797af7 100644 --- a/src/mathi.h +++ b/src/mathi.h @@ -30,6 +30,10 @@ #ifndef AMATH_LIB_COMPLEX_H #define AMATH_LIB_COMPLEX_H +#if __GNUC__ > 2 +#pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch" +#endif + /** * @file mathi.h * @brief Complex numbers math library