diff --git a/cmake/modules/CheckCXXFeatures.cmake b/cmake/modules/CheckCXXFeatures.cmake index fc8f266f3ed260d39df1c613f588ec6e77202cf7..0d68a4c3e49dc41c54709b7edd6bde2d385fdb2d 100644 --- a/cmake/modules/CheckCXXFeatures.cmake +++ b/cmake/modules/CheckCXXFeatures.cmake @@ -10,9 +10,6 @@ # This module internally sets the following variables, which are then # exported into the config.h of the current dune module. # -# :code:`HAVE_NULLPTR` -# True if nullptr is available -# # :code:`HAS_ATTRIBUTE_UNUSED` # True if attribute unused is supported # @@ -22,18 +19,6 @@ # :code:`HAS_ATTRIBUTE_DEPRECATED_MSG` # True if attribute deprecated("msg") is supported # -# :code:`HAVE_CONSTEXPR1` -# True if constexpr is supported -# -# :code:`HAVE_KEYWORD_FINAL` -# True if final is supported. -# -# :code:`HAVE_RANGE_BASED_FOR` -# True if range-based for is supported and working. -# -# :code:`HAVE_NOEXCEPT_SPECIFIER` -# True if nonexcept specifier is supported. -# # .. cmake_variable:: DISABLE_CXX_VERSION_CHECK # # You may set this variable to TRUE to disable checking for @@ -122,42 +107,6 @@ endif() # perform tests include(CheckCXXSourceCompiles) -# nullptr -check_cxx_source_compiles(" - int main(void) - { - char* ch = nullptr; - return 0; - } -" HAVE_NULLPTR - ) - -if(HAVE_NULLPTR) - check_cxx_source_compiles(" - #include <cstddef> - - int main(void) - { - std::nullptr_t npt = nullptr; - return 0; - } -" HAVE_NULLPTR_T - ) - if (NOT HAVE_NULLPTR_T) - if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") - message(FATAL_ERROR "Your compiler supports the 'nullptr' keyword, but not the type std::nullptr_t. -You are using an Intel compiler, where this error is typically caused by an outdated underlying system GCC. -Check if 'gcc --version' gives you at least GCC 4.6, otherwise please install a newer GCC and point your Intel compiler at it using the '-gcc-name' or '-gxx-name' options (see 'man icc' for further details)." - ) - else() - message(FATAL_ERROR "Your compiler supports the 'nullptr' keyword, but not the type std::nullptr_t. -THIS SHOULD NOT HAPPEN FOR YOUR COMPILER! -Please submit a bug at https://dune-project.org/flyspray/" - ) - endif() - endif() -endif() - # __attribute__((unused)) check_cxx_source_compiles(" int main(void) @@ -232,87 +181,6 @@ check_cxx_source_compiles(" " HAS_ATTRIBUTE_DEPRECATED_MSG ) -# constexpr -check_cxx_source_compiles(" - constexpr int foo() - { return 0; } - - template<int v> - struct A - { - static const int value = v; - }; - - int main(void) - { - return A<foo()>::value; - } -" HAVE_CONSTEXPR -) - -# keyword final -check_cxx_source_compiles(" - struct Foo - { - virtual void foo() final; - }; - - int main(void) - { - return 0; - } -" HAVE_KEYWORD_FINAL -) - -# range-based for -check_cxx_source_compiles(" - int main(void) - { - int arr[3]; - for(int &val : arr) - val = 0; - } -" HAVE_RANGE_BASED_FOR -) - -# nonexcept specifier -check_cxx_source_compiles(" - void func1() noexcept {} - - void func2() noexcept(true) {} - - template <class T> - void func3() noexcept(noexcept(T())) {} - - int main(void) - { - func1(); - func2(); - func3<int>(); - } -" HAVE_NOEXCEPT_SPECIFIER -) - -# std::declval() -check_cxx_source_compiles(" - #include <utility> - - template<typename T> - struct check; - - template<> - struct check<int&&> - { - int pass() { return 0; } - }; - - int main(void) - { - return check<decltype(std::declval<int>())>().pass(); - } -" HAVE_STD_DECLVAL - ) - # full support for is_indexable (checking whether a type supports operator[]) check_cxx_source_compiles(" #include <utility> diff --git a/config.h.cmake b/config.h.cmake index e4e1d0164f5be4bcf61ac51a98537be0cfda5831..6777d43d554c96c72db3b0d155415dc3d94ba0bc 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -50,9 +50,6 @@ /* Define to 1 if you have the symbol mprotect. */ #cmakedefine HAVE_MPROTECT 1 -/* Define to 1 if nullptr is supported */ -#cmakedefine HAVE_NULLPTR 1 - /* Define to 1 if you have the <stdint.h> header file. */ #cmakedefine HAVE_STDINT_H 1 @@ -90,24 +87,19 @@ /* end private */ -/* Define to 1 if C++11 constexpr is supported */ -#cmakedefine HAVE_CONSTEXPR 1 - -/* Define to 1 if C++11 range-based for is supported */ -#cmakedefine HAVE_RANGE_BASED_FOR 1 - -/* Define to 1 if C++11 nonexcept specifier is supported */ -#cmakedefine HAVE_NOEXCEPT_SPECIFIER 1 - -/* Define to 1 if C++11 std::declval() is supported */ -#cmakedefine HAVE_STD_DECLVAL 1 +/* old feature support macros which were tested until 2.4, kept around for one more release */ +/* As these are now always supported due to the new compiler requirements, they are directly */ +/* defined without an explicit test. */ +#define HAVE_NULLPTR 1 +#define HAVE_CONSTEXPR 1 +#define HAVE_RANGE_BASED_FOR 1 +#define HAVE_NOEXCEPT_SPECIFIER 1 +#define HAVE_STD_DECLVAL 1 +#define HAVE_KEYWORD_FINAL 1 /* Define to 1 if the compiler properly supports testing for operator[] */ #cmakedefine HAVE_IS_INDEXABLE_SUPPORT 1 -/* does the compiler support the keyword 'final'? */ -#cmakedefine HAVE_KEYWORD_FINAL 1 - /* Define to if the UMFPack library is available */ #cmakedefine HAVE_UMFPACK ENABLE_UMFPACK diff --git a/dune/common/std/utility.hh b/dune/common/std/utility.hh index 3655caa128d8aa02a382b35292f7798335125f9c..4af6a60c118d2aa5fff5774bad598c3b5b15525f 100644 --- a/dune/common/std/utility.hh +++ b/dune/common/std/utility.hh @@ -170,18 +170,8 @@ namespace Dune return typename make_index_sequence_impl< sizeof...( T ) >::type(); } -#if HAVE_STD_DECLVAL - using std::declval; -#else - - template <class T> - typename std::add_rvalue_reference<T>::type declval() DUNE_NOEXCEPT; - -#endif - - } // namespace Std } // namespace Dune