diff --git a/sprout/config/compiler/intel.hpp b/sprout/config/compiler/intel.hpp index 0bb31ff7..cddaf280 100644 --- a/sprout/config/compiler/intel.hpp +++ b/sprout/config/compiler/intel.hpp @@ -1,13 +1,50 @@ /*============================================================================= - Copyright (c) 2011-2014 Bolero MURAKAMI - https://github.com/bolero-MURAKAMI/Sprout + Copyright (c) 2011-2014 Bolero MURAKAMI + https://github.com/bolero-MURAKAMI/Sprout - Distributed under 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) + Distributed under 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 SPROUT_CONFIG_COMPILER_INTEL_HPP #define SPROUT_CONFIG_COMPILER_INTEL_HPP #include +#if defined(__INTEL_COMPILER) +# define SPROUT_INTEL_CXX_VERSION __INTEL_COMPILER +#elif defined(__ICL) +# define SPROUT_INTEL_CXX_VERSION __ICL +#elif defined(__ICC) +# define SPROUT_INTEL_CXX_VERSION __ICC +#elif defined(__ECC) +# define SPROUT_INTEL_CXX_VERSION __ECC +#endif + +#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (SPROUT_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__) +# define SPROUT_INTEL_STDCXX11 +#endif +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +# define SPROUT_INTEL_STDCXX11 +#endif + +#if defined(SPROUT_INTEL_STDCXX11) && (SPROUT_INTEL_CXX_VERSION >= 1200) +# undef SPROUT_NO_CXX11_DELETED_FUNCTIONS +# undef SPROUT_NO_CXX11_DEFAULTED_FUNCTIONS +#endif + +#if defined(SPROUT_INTEL_STDCXX11) && (SPROUT_INTEL_CXX_VERSION > 1200) +# undef SPROUT_NO_CXX11_TEMPLATE_ALIASES +#endif + +#if defined(SPROUT_INTEL_STDCXX11) && (SPROUT_INTEL_CXX_VERSION >= 1400) && !defined(_MSC_VER) +# undef SPROUT_NO_CXX11_UNICODE_LITERALS +# undef SPROUT_NO_CXX11_CONSTEXPR +#endif + +#if defined(_MSC_VER) && (_MSC_VER <= 1700) +# define SPROUT_NO_CXX11_DELETED_FUNCTIONS +# define SPROUT_NO_CXX11_DEFAULTED_FUNCTIONS +# define SPROUT_NO_CXX11_TEMPLATE_ALIASES +#endif + #endif // #ifndef SPROUT_CONFIG_COMPILER_INTEL_HPP diff --git a/sprout/tuple/tuple/make_tuple.hpp b/sprout/tuple/tuple/make_tuple.hpp index b64af01c..051ab99e 100644 --- a/sprout/tuple/tuple/make_tuple.hpp +++ b/sprout/tuple/tuple/make_tuple.hpp @@ -41,7 +41,7 @@ namespace sprout { // tie // template - inline sprout::tuples::tuple + inline SPROUT_CONSTEXPR sprout::tuples::tuple tie(Types&... args) SPROUT_NOEXCEPT { return sprout::tuples::tuple(args...); } diff --git a/sprout/type_traits/enabler_if.hpp b/sprout/type_traits/enabler_if.hpp index f2558d13..6931dfc1 100644 --- a/sprout/type_traits/enabler_if.hpp +++ b/sprout/type_traits/enabler_if.hpp @@ -16,14 +16,24 @@ namespace sprout { // enabler_t // enabler // - typedef void* enabler_t; + typedef void** enabler_t; +#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) + namespace { + SPROUT_STATIC_CONSTEXPR sprout::enabler_t enabler = {}; + } // anonymous-namespace +#else extern enabler_t enabler; +#endif // // enabler_if // template class enabler_if +#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) + : public std::enable_if +#else : public std::enable_if +#endif {}; #if SPROUT_USE_TEMPLATE_ALIASES