Skip to content

Commit 5a92478

Browse files
committed
Added minimum compiler version assertions
We now require (and enforce at compile time): - GCC 4.8+ - clang 3.3+ (5.0+ for Apple's renumbered clang) - MSVC 2015u3+ - ICC 15+ This also updates the versions listed in the README, and removes a now-redundant MSVC version check.
1 parent 3d591e8 commit 5a92478

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ In addition to the core functionality, pybind11 provides some extra goodies:
9696

9797
## Supported compilers
9898

99-
1. Clang/LLVM (any non-ancient version with C++11 support)
99+
1. Clang/LLVM 3.3 or newer (for Apple Xcode's clang, this is 5.0.0 or newer)
100100
2. GCC 4.8 or newer
101-
3. Microsoft Visual Studio 2015 or newer
101+
3. Microsoft Visual Studio 2015 Update 3 or newer
102102
4. Intel C++ compiler 16 or newer (15 with a [workaround](https://github.com/pybind/pybind11/issues/276))
103103
5. Cygwin/GCC (tested on 2.5.1)
104104

include/pybind11/common.h

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,33 @@
2828
# endif
2929
#endif
3030

31+
// Compiler version assertions
32+
#if defined(__INTEL_COMPILER)
33+
# if __INTEL_COMPILER < 1500
34+
# error pybind11 requires Intel C++ compiler v15 or newer
35+
# endif
36+
#elif defined(__clang__) && !defined(__apple_build_version__)
37+
# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 3)
38+
# error pybind11 requires clang 3.3 or newer
39+
# endif
40+
#elif defined(__clang__)
41+
// Apple changes clang version macros to its Xcode version; the first Xcode release based on
42+
// (upstream) clang 3.3 was Xcode 5:
43+
# if __clang_major__ < 5
44+
# error pybind11 requires Xcode/clang 5.0 or newer
45+
# endif
46+
#elif defined(__GNUG__)
47+
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
48+
# error pybind11 requires gcc 4.8 or newer
49+
# endif
50+
#elif defined(_MSC_VER)
51+
// Pybind hits various compiler bugs in 2015u2 and earlier, and also makes use of some stl features
52+
// (e.g. std::negation) added in 2015u3:
53+
# if _MSC_FULL_VER < 190024213
54+
# error pybind11 requires MSVC 2015 update 3 or newer
55+
# endif
56+
#endif
57+
3158
#if !defined(PYBIND11_EXPORT)
3259
# if defined(WIN32) || defined(_WIN32)
3360
# define PYBIND11_EXPORT __declspec(dllexport)
@@ -651,8 +678,8 @@ struct error_scope {
651678
/// Dummy destructor wrapper that can be used to expose classes with a private destructor
652679
struct nodelete { template <typename T> void operator()(T*) { } };
653680

654-
// overload_cast requires variable templates: C++14 or MSVC 2015 Update 2
655-
#if defined(PYBIND11_CPP14) || _MSC_FULL_VER >= 190023918
681+
// overload_cast requires variable templates: C++14 or MSVC
682+
#if defined(PYBIND11_CPP14) || defined(_MSC_VER)
656683
#define PYBIND11_OVERLOAD_CAST 1
657684

658685
NAMESPACE_BEGIN(detail)

0 commit comments

Comments
 (0)