mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 22:52:01 +00:00
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.
This commit is contained in:
parent
3d591e8f2f
commit
5a9247872d
@ -96,9 +96,9 @@ In addition to the core functionality, pybind11 provides some extra goodies:
|
|||||||
|
|
||||||
## Supported compilers
|
## Supported compilers
|
||||||
|
|
||||||
1. Clang/LLVM (any non-ancient version with C++11 support)
|
1. Clang/LLVM 3.3 or newer (for Apple Xcode's clang, this is 5.0.0 or newer)
|
||||||
2. GCC 4.8 or newer
|
2. GCC 4.8 or newer
|
||||||
3. Microsoft Visual Studio 2015 or newer
|
3. Microsoft Visual Studio 2015 Update 3 or newer
|
||||||
4. Intel C++ compiler 16 or newer (15 with a [workaround](https://github.com/pybind/pybind11/issues/276))
|
4. Intel C++ compiler 16 or newer (15 with a [workaround](https://github.com/pybind/pybind11/issues/276))
|
||||||
5. Cygwin/GCC (tested on 2.5.1)
|
5. Cygwin/GCC (tested on 2.5.1)
|
||||||
|
|
||||||
|
@ -28,6 +28,33 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Compiler version assertions
|
||||||
|
#if defined(__INTEL_COMPILER)
|
||||||
|
# if __INTEL_COMPILER < 1500
|
||||||
|
# error pybind11 requires Intel C++ compiler v15 or newer
|
||||||
|
# endif
|
||||||
|
#elif defined(__clang__) && !defined(__apple_build_version__)
|
||||||
|
# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 3)
|
||||||
|
# error pybind11 requires clang 3.3 or newer
|
||||||
|
# endif
|
||||||
|
#elif defined(__clang__)
|
||||||
|
// Apple changes clang version macros to its Xcode version; the first Xcode release based on
|
||||||
|
// (upstream) clang 3.3 was Xcode 5:
|
||||||
|
# if __clang_major__ < 5
|
||||||
|
# error pybind11 requires Xcode/clang 5.0 or newer
|
||||||
|
# endif
|
||||||
|
#elif defined(__GNUG__)
|
||||||
|
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
|
||||||
|
# error pybind11 requires gcc 4.8 or newer
|
||||||
|
# endif
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
// Pybind hits various compiler bugs in 2015u2 and earlier, and also makes use of some stl features
|
||||||
|
// (e.g. std::negation) added in 2015u3:
|
||||||
|
# if _MSC_FULL_VER < 190024213
|
||||||
|
# error pybind11 requires MSVC 2015 update 3 or newer
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(PYBIND11_EXPORT)
|
#if !defined(PYBIND11_EXPORT)
|
||||||
# if defined(WIN32) || defined(_WIN32)
|
# if defined(WIN32) || defined(_WIN32)
|
||||||
# define PYBIND11_EXPORT __declspec(dllexport)
|
# define PYBIND11_EXPORT __declspec(dllexport)
|
||||||
@ -651,8 +678,8 @@ struct error_scope {
|
|||||||
/// Dummy destructor wrapper that can be used to expose classes with a private destructor
|
/// Dummy destructor wrapper that can be used to expose classes with a private destructor
|
||||||
struct nodelete { template <typename T> void operator()(T*) { } };
|
struct nodelete { template <typename T> void operator()(T*) { } };
|
||||||
|
|
||||||
// overload_cast requires variable templates: C++14 or MSVC 2015 Update 2
|
// overload_cast requires variable templates: C++14 or MSVC
|
||||||
#if defined(PYBIND11_CPP14) || _MSC_FULL_VER >= 190023918
|
#if defined(PYBIND11_CPP14) || defined(_MSC_VER)
|
||||||
#define PYBIND11_OVERLOAD_CAST 1
|
#define PYBIND11_OVERLOAD_CAST 1
|
||||||
|
|
||||||
NAMESPACE_BEGIN(detail)
|
NAMESPACE_BEGIN(detail)
|
||||||
|
Loading…
Reference in New Issue
Block a user