From 3be401f2a20eb7d21ab7fb111ad40feaa30f9775 Mon Sep 17 00:00:00 2001 From: Jason Rhinelander Date: Fri, 15 Dec 2017 10:15:25 -0400 Subject: [PATCH] Silence new MSVC C++17 deprecation warnings In the latest MSVC in C++17 mode including Eigen causes warnings: warning C4996: 'std::unary_negate<_Fn>': warning STL4008: std::not1(), std::not2(), std::unary_negate, and std::binary_negate are deprecated in C++17. They are superseded by std::not_fn(). You can define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received this warning. This disables 4996 for the Eigen includes. Catch generates a similar warning for std::uncaught_exception, so disable the warning there, too. In both cases this is temporary; we can (and should) remove the warnings disabling once new upstream versions of Eigen and Catch are available that address the warning. (The Catch one, in particular, looks to be fixed in upstream master, so will probably be fixed in the next (2.0.2) release). --- include/pybind11/eigen.h | 7 ++++--- tests/test_eigen.cpp | 5 +++++ tests/test_embed/catch.cpp | 6 ++++++ tests/test_embed/test_interpreter.cpp | 7 +++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/pybind11/eigen.h b/include/pybind11/eigen.h index e8b4249ae..531d0706a 100644 --- a/include/pybind11/eigen.h +++ b/include/pybind11/eigen.h @@ -27,14 +27,15 @@ # endif #endif -#include -#include - #if defined(_MSC_VER) # pragma warning(push) # pragma warning(disable: 4127) // warning C4127: Conditional expression is constant +# pragma warning(disable: 4996) // warning C4996: std::unary_negate is deprecated in C++17 #endif +#include +#include + // Eigen prior to 3.2.7 doesn't have proper move constructors--but worse, some classes get implicit // move constructors that break things. We could detect this an explicitly copy, but an extra copy // of matrices seems highly undesirable. diff --git a/tests/test_eigen.cpp b/tests/test_eigen.cpp index 20be0aa11..22141df02 100644 --- a/tests/test_eigen.cpp +++ b/tests/test_eigen.cpp @@ -11,6 +11,11 @@ #include "constructor_stats.h" #include #include + +#if defined(_MSC_VER) +# pragma warning(disable: 4996) // C4996: std::unary_negation is deprecated +#endif + #include using MatrixXdR = Eigen::Matrix; diff --git a/tests/test_embed/catch.cpp b/tests/test_embed/catch.cpp index cface485d..236409dbd 100644 --- a/tests/test_embed/catch.cpp +++ b/tests/test_embed/catch.cpp @@ -3,6 +3,12 @@ #include +#ifdef _MSC_VER +// Silence MSVC C++17 deprecation warning from Catch regarding std::uncaught_exceptions (up to catch +// 2.0.1; this should be fixed in the next catch release after 2.0.1). +# pragma warning(disable: 4996) +#endif + #define CATCH_CONFIG_RUNNER #include diff --git a/tests/test_embed/test_interpreter.cpp b/tests/test_embed/test_interpreter.cpp index 6b5f051f2..641402d30 100644 --- a/tests/test_embed/test_interpreter.cpp +++ b/tests/test_embed/test_interpreter.cpp @@ -1,4 +1,11 @@ #include + +#ifdef _MSC_VER +// Silence MSVC C++17 deprecation warning from Catch regarding std::uncaught_exceptions (up to catch +// 2.0.1; this should be fixed in the next catch release after 2.0.1). +# pragma warning(disable: 4996) +#endif + #include #include