diff --git a/.travis.yml b/.travis.yml index 4dd7d06721..763a70f960 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,28 @@ matrix: - os: linux env: TOOLSET=gcc COMPILER=g++ CXXSTD=03 + - os: linux + env: TOOLSET=intel COMPILER=icpc CXXSTD=03,11 TEST_INTEL=1 + before_install: + - wget -q 'https://raw.githubusercontent.com/nemequ/icc-travis/master/install-icc.sh' + - bash ./install-icc.sh + after_script: + - '[[ ! -z "${INTEL_INSTALL_PATH}" ]] && uninstall_intel_software' + + - os: linux + env: TOOLSET=intel COMPILER=icpc CXXSTD=11,14 TEST_INTEL=1 EXTRA_FLAGS=-gcc-name=g++-6 + before_install: + - wget -q 'https://raw.githubusercontent.com/nemequ/icc-travis/master/install-icc.sh' + - bash ./install-icc.sh + after_script: + - '[[ ! -z "${INTEL_INSTALL_PATH}" ]] && uninstall_intel_software' + addons: + apt: + packages: + - g++-6 + sources: + - ubuntu-toolchain-r-test + - os: linux compiler: g++-4.4 env: TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98,0x @@ -274,6 +296,7 @@ install: - ./b2 headers script: + - if [ $TEST_INTEL ]; then source ~/.bashrc; fi - |- echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam - IFS=',' diff --git a/include/boost/type_traits/is_complete.hpp b/include/boost/type_traits/is_complete.hpp index 07cb89749d..5615668e1a 100644 --- a/include/boost/type_traits/is_complete.hpp +++ b/include/boost/type_traits/is_complete.hpp @@ -36,7 +36,7 @@ namespace boost { // #define BOOST_TT_HAS_WORKING_IS_COMPLETE -#if !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_MSVC, <= 1900) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40600) +#if !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_MSVC, <= 1900) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40600) && !BOOST_WORKAROUND(__ICC, < 1700) namespace detail{ @@ -78,6 +78,15 @@ namespace boost { template struct is_complete : boost::is_complete {}; +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + template + struct is_complete : boost::is_complete {}; +#endif +#ifdef __ICC + template + struct is_complete : boost::integral_constant {}; +#endif + #else template struct is_complete diff --git a/test/compile_fail/is_base_of_fail.cpp b/test/compile_fail/is_base_of_fail.cpp index cff40b20d5..6dbd882356 100644 --- a/test/compile_fail/is_base_of_fail.cpp +++ b/test/compile_fail/is_base_of_fail.cpp @@ -7,6 +7,10 @@ # include #include "../test.hpp" +#if BOOST_WORKAROUND(__ICC, < 1700) && defined(CI_SUPPRESS_KNOWN_ISSUES) +# error "Unsupport test" +#endif + int main() { return boost::is_base_of::value; diff --git a/test/compile_fail/is_virtual_base_of_fail.cpp b/test/compile_fail/is_virtual_base_of_fail.cpp index a8ca79ee12..e3eb86a2f6 100644 --- a/test/compile_fail/is_virtual_base_of_fail.cpp +++ b/test/compile_fail/is_virtual_base_of_fail.cpp @@ -7,6 +7,10 @@ # include #include "../test.hpp" +#if BOOST_WORKAROUND(__ICC, < 1700) && defined(CI_SUPPRESS_KNOWN_ISSUES) +# error "Unsupport test" +#endif + int main() { return boost::is_virtual_base_of::value; diff --git a/test/has_plus_assign_test.cpp b/test/has_plus_assign_test.cpp index 488cefd688..70abe3e735 100644 --- a/test/has_plus_assign_test.cpp +++ b/test/has_plus_assign_test.cpp @@ -147,9 +147,11 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* &, bool & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* &, bool const & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const, bool const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const, int const & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool &, bool >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, int const, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, int &, int >::value), 0); @@ -164,7 +166,9 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool, bool & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool const &, int const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool const &, int & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int, bool >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, void* const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int*, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int* &, int const & >::value), 0); diff --git a/test/has_plus_test.cpp b/test/has_plus_test.cpp index 6804eb5390..57d6fea929 100644 --- a/test/has_plus_test.cpp +++ b/test/has_plus_test.cpp @@ -33,7 +33,9 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, bool &, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, int, int const & >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, double &, bool & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, void* &, bool const >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, int*, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool, int*, bool const & >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const, int & >::value), 1); @@ -50,7 +52,9 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, int &, int const & >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, double const, bool >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, double const &, int const & >::value), 1); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, void*, bool const & >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, void* const, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, void* const, int const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool &, void* const &, bool & >::value), 0); @@ -62,7 +66,9 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, double const, bool & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, double &, bool & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, double const &, bool >::value), 1); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, void* &, bool const & >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, int*, bool const & >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< bool const &, int* const &, int const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int, bool, int const >::value), 1); @@ -88,9 +94,11 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, int const &, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, int const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, double & >::value), 1); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, void*, bool >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, void*, int >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const, void* &, bool const & >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int &, bool, bool >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int &, bool const >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int &, bool &, bool >::value), 1); @@ -107,7 +115,9 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const &, double, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const &, double &, bool >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const &, double const &, bool & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< int const &, void* const, bool const >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double, bool >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double, bool const, bool const >::value), 1); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double, bool &, void >::value), 0); @@ -147,9 +157,11 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* &, bool & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< double const &, int* &, bool const & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const, bool const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const, int const & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool &, bool >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, bool const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, int const, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void*, int &, int >::value), 0); @@ -162,9 +174,11 @@ void specific() { BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* const, void* &, bool >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* const, int*, int const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool, bool & >::value), 0); +#if !BOOST_WORKAROUND(__ICC, < 1700) || !defined(CI_SUPPRESS_KNOWN_ISSUES) BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool const &, int const >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, bool const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int, bool >::value), 0); +#endif BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, void* const &, int & >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int*, void >::value), 0); BOOST_CHECK_INTEGRAL_CONSTANT((::boost::BOOST_TT_TRAIT_NAME< void* &, int* &, int const & >::value), 0); diff --git a/test/is_list_constructible_test.cpp b/test/is_list_constructible_test.cpp index 55414060a2..2db35c51b4 100644 --- a/test/is_list_constructible_test.cpp +++ b/test/is_list_constructible_test.cpp @@ -20,7 +20,7 @@ #if defined(BOOST_NO_SFINAE_EXPR) || defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_NO_CXX11_DECLTYPE) \ || defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS)\ - || BOOST_WORKAROUND(BOOST_GCC, < 40700) + || BOOST_WORKAROUND(BOOST_GCC, < 40700) || BOOST_WORKAROUND(__ICC, < 1700) int main() {}