sl@0: // (C) Copyright John Maddock 2001. sl@0: // (C) Copyright Peter Dimov 2001. sl@0: // (C) Copyright Jens Maurer 2001. sl@0: // (C) Copyright David Abrahams 2002 - 2003. sl@0: // (C) Copyright Aleksey Gurtovoy 2002 - 2003. sl@0: // (C) Copyright Guillaume Melquiond 2002 - 2003. sl@0: // (C) Copyright Beman Dawes 2003. sl@0: // (C) Copyright Martin Wille 2003. sl@0: // Use, modification and distribution are subject to the sl@0: // Boost Software License, Version 1.0. (See accompanying file sl@0: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) sl@0: sl@0: // See http://www.boost.org for most recent version. sl@0: sl@0: // Intel compiler setup: sl@0: sl@0: #include "boost/config/compiler/common_edg.hpp" sl@0: sl@0: #if defined(__INTEL_COMPILER) sl@0: # define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER sl@0: #elif defined(__ICL) sl@0: # define BOOST_INTEL_CXX_VERSION __ICL sl@0: #elif defined(__ICC) sl@0: # define BOOST_INTEL_CXX_VERSION __ICC sl@0: #elif defined(__ECC) sl@0: # define BOOST_INTEL_CXX_VERSION __ECC sl@0: #endif sl@0: sl@0: #define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) sl@0: #define BOOST_INTEL BOOST_INTEL_CXX_VERSION sl@0: sl@0: #if defined(_WIN32) || defined(_WIN64) sl@0: # define BOOST_INTEL_WIN BOOST_INTEL sl@0: #else sl@0: # define BOOST_INTEL_LINUX BOOST_INTEL sl@0: #endif sl@0: sl@0: #if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER) sl@0: # define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS sl@0: # define BOOST_NO_TEMPLATE_TEMPLATES sl@0: #endif sl@0: sl@0: #if (BOOST_INTEL_CXX_VERSION <= 600) sl@0: sl@0: # if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov) sl@0: sl@0: // Boost libraries assume strong standard conformance unless otherwise sl@0: // indicated by a config macro. As configured by Intel, the EDG front-end sl@0: // requires certain compiler options be set to achieve that strong conformance. sl@0: // Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt) sl@0: // and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for sl@0: // details as they apply to particular versions of the compiler. When the sl@0: // compiler does not predefine a macro indicating if an option has been set, sl@0: // this config file simply assumes the option has been set. sl@0: // Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if sl@0: // the compiler option is not enabled. sl@0: sl@0: # define BOOST_NO_SWPRINTF sl@0: # endif sl@0: sl@0: // Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov) sl@0: sl@0: # if defined(_MSC_VER) && (_MSC_VER <= 1200) sl@0: # define BOOST_NO_VOID_RETURNS sl@0: # define BOOST_NO_INTEGRAL_INT64_T sl@0: # endif sl@0: sl@0: #endif sl@0: sl@0: #if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32) sl@0: # define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS sl@0: #endif sl@0: sl@0: // See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864 sl@0: #if BOOST_INTEL_CXX_VERSION < 600 sl@0: # define BOOST_NO_INTRINSIC_WCHAR_T sl@0: #else sl@0: // We should test the macro _WCHAR_T_DEFINED to check if the compiler sl@0: // supports wchar_t natively. *BUT* there is a problem here: the standard sl@0: // headers define this macro if they typedef wchar_t. Anyway, we're lucky sl@0: // because they define it without a value, while Intel C++ defines it sl@0: // to 1. So we can check its value to see if the macro was defined natively sl@0: // or not. sl@0: // Under UNIX, the situation is exactly the same, but the macro _WCHAR_T sl@0: // is used instead. sl@0: # if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0) sl@0: # define BOOST_NO_INTRINSIC_WCHAR_T sl@0: # endif sl@0: #endif sl@0: sl@0: #if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) sl@0: // sl@0: // Figure out when Intel is emulating this gcc bug sl@0: // (All Intel versions prior to 9.0.26, and versions sl@0: // later than that if they are set up to emulate gcc 3.2 sl@0: // or earlier): sl@0: // sl@0: # if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912) sl@0: # define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL sl@0: # endif sl@0: #endif sl@0: sl@0: // sl@0: // Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T sl@0: // set correctly, if we don't do this now, we will get errors later sl@0: // in type_traits code among other things, getting this correct sl@0: // for the Intel compiler is actually remarkably fragile and tricky: sl@0: // sl@0: #if defined(BOOST_NO_INTRINSIC_WCHAR_T) sl@0: #include sl@0: template< typename T > struct assert_no_intrinsic_wchar_t; sl@0: template<> struct assert_no_intrinsic_wchar_t { typedef void type; }; sl@0: // if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T sl@0: // where it is defined above: sl@0: typedef assert_no_intrinsic_wchar_t::type assert_no_intrinsic_wchar_t_; sl@0: #else sl@0: template< typename T > struct assert_intrinsic_wchar_t; sl@0: template<> struct assert_intrinsic_wchar_t {}; sl@0: // if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line: sl@0: template<> struct assert_intrinsic_wchar_t {}; sl@0: #endif sl@0: sl@0: #if _MSC_VER+0 >= 1000 sl@0: # if _MSC_VER >= 1200 sl@0: # define BOOST_HAS_MS_INT64 sl@0: # endif sl@0: # define BOOST_NO_SWPRINTF sl@0: #elif defined(_WIN32) sl@0: # define BOOST_DISABLE_WIN32 sl@0: #endif sl@0: sl@0: // I checked version 6.0 build 020312Z, it implements the NRVO. sl@0: // Correct this as you find out which version of the compiler sl@0: // implemented the NRVO first. (Daniel Frey) sl@0: #if (BOOST_INTEL_CXX_VERSION >= 600) sl@0: # define BOOST_HAS_NRVO sl@0: #endif sl@0: sl@0: // sl@0: // versions check: sl@0: // we don't support Intel prior to version 5.0: sl@0: #if BOOST_INTEL_CXX_VERSION < 500 sl@0: # error "Compiler not supported or configured - please reconfigure" sl@0: #endif sl@0: // sl@0: // last known and checked version: sl@0: #if (BOOST_INTEL_CXX_VERSION > 910) sl@0: # if defined(BOOST_ASSERT_CONFIG) sl@0: # error "Unknown compiler version - please run the configure tests and report the results" sl@0: # elif defined(_MSC_VER) sl@0: # pragma message("Unknown compiler version - please run the configure tests and report the results") sl@0: # endif sl@0: #endif sl@0: sl@0: sl@0: sl@0: sl@0: