summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/math/test/compile_test/poison.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/math/test/compile_test/poison.hpp')
-rw-r--r--src/boost/libs/math/test/compile_test/poison.hpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/boost/libs/math/test/compile_test/poison.hpp b/src/boost/libs/math/test/compile_test/poison.hpp
new file mode 100644
index 00000000..6d72d9d2
--- /dev/null
+++ b/src/boost/libs/math/test/compile_test/poison.hpp
@@ -0,0 +1,141 @@
+// Copyright John Maddock 2013.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_COMPILE_POISON_HPP
+#define BOOST_MATH_COMPILE_POISON_HPP
+
+#include <cmath>
+#include <math.h>
+
+//
+// As per https://github.com/boostorg/math/issues/126
+// we basically need to include every std lib header we use, otherwise
+// our poisoned macros can break legit std lib code.
+//
+#include <boost/config.hpp>
+#include <valarray>
+#include <complex>
+#include <iosfwd>
+#include <sstream>
+#include <ostream>
+#include <istream>
+#include <utility>
+#include <iomanip>
+#include <typeinfo>
+#include <stdexcept>
+#include <cstddef>
+#include <string>
+#include <cstring>
+#include <cctype>
+#include <limits>
+#include <exception>
+#include <iterator>
+#include <numeric>
+#include <vector>
+#include <algorithm>
+#include <typeinfo>
+#include <memory>
+#include <cerrno>
+#include <functional>
+#ifndef BOOST_NO_CXX11_HDR_FUTURE
+#include <future>
+#endif
+#ifndef BOOST_NO_CXX11_HDR_THREAD
+#include <thread>
+#endif
+#ifndef BOOST_NO_CXX11_HDR_RANDOM
+#include <random>
+#endif
+#ifndef BOOST_NO_CXX11_HDR_CHRONO
+#include <chrono>
+#endif
+#include <map>
+
+//
+// We have to include this *before* poisoning the macros
+// as it needs to be able to use them!
+//
+#include <boost/math/special_functions/fpclassify.hpp>
+
+//
+// Poison all the function-like macros in C99 so if we accidentally call them
+// in an unsafe manner, we'll get compiler errors. Of course these shouldn't be
+// macros in C++ at all...
+//
+
+#ifdef fpclassify
+#undef fpclassify
+#endif
+
+#define fpclassify(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isfinite
+#undef isfinite
+#endif
+
+#define isfinite(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isinf
+#undef isinf
+#endif
+
+#define isinf(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isnan
+#undef isnan
+#endif
+
+#define isnan(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isnormal
+#undef isnormal
+#endif
+
+#define isnormal(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef signbit
+#undef signbit
+#endif
+
+#define signbit(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isgreater
+#undef isgreater
+#endif
+
+#define isgreater(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isgreaterequal
+#undef isgreaterequal
+#endif
+
+#define isgreaterequal(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isless
+#undef isless
+#endif
+
+#define isless(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef islessequal
+#undef islessequal
+#endif
+
+#define islessequal(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef islessgreater
+#undef islessgreater
+#endif
+
+#define islessgreater(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#ifdef isunordered
+#undef isunordered
+#endif
+
+#define isunordered(x) this_should_not_compile(x)}}}}}}}}}}}}}}}}}}}
+
+#endif
+