diff --git a/cmake/modules/CheckCXX11Features.cmake b/cmake/modules/CheckCXX11Features.cmake index c44feeeb38a8093b44b06af7a439a84db2469a2c..9f3cd9ecb378059279976bc603307d288516a479 100644 --- a/cmake/modules/CheckCXX11Features.cmake +++ b/cmake/modules/CheckCXX11Features.cmake @@ -9,8 +9,6 @@ # HAS_ATTRIBUTE_DEPRECATED True if attribute deprecated is supported # HAS_ATTRIBUTE_DEPRECATED_MSG True if attribute deprecated("msg") is supported # HAVE_INTEGRAL_CONSTANT True if compiler supports integral_constant -# HAVE_VARIADIC_TEMPLATES True if variadic templates are supprt -# HAVE_VARIADIC_CONSTRUCTOR_SFINAE True if variadic constructor sfinae is supported # HAVE_RVALUE_REFERENCES True if rvalue references are supported # HAVE_CONSTEXPR True if constexpr is supported # HAVE_KEYWORD_FINAL True if final is supported. @@ -183,68 +181,6 @@ check_cxx_source_compiles(" " HAS_ATTRIBUTE_DEPRECATED_MSG ) -# variadic template support -check_cxx_source_compiles(" - #include <cassert> - - template<typename... T> - int addints(T... x); - - int add_ints() - { - return 0; - } - - template<typename T1, typename... T> - int add_ints(T1 t1, T... t) - { - return t1 + add_ints(t...); - } - - int main(void) - { - assert( 5 == add_ints(9,3,-5,-2) ); - return 0; - } -" HAVE_VARIADIC_TEMPLATES -) - -# SFINAE on variadic template constructors within template classes -check_cxx_source_compiles(" - #include <functional> - - template<typename... U> - struct A - { - template<typename... T, - typename = typename std::enable_if<(sizeof...(T) < 2)>::type - > - A(T... t) - : i(1) - {} - - template<typename... T, - typename = typename std::enable_if<(sizeof...(T) >= 2)>::type, - typename = void - > - A(T... t) - : i(-1) - {} - - A() - : i(1) - {} - - int i; - }; - - int main(void) - { - return (A<int>().i + A<int>(2).i + A<int>(\"foo\",3.4).i + A<int>(8,'a',A<int>()).i == 0 ? 0 : 1); - } -" HAVE_VARIADIC_CONSTRUCTOR_SFINAE -) - # rvalue references check_cxx_source_compiles(" #include <cassert> diff --git a/config.h.cmake b/config.h.cmake index e50712c5e877078bd6a3f1a230b3993ca48f7b71..4b508260a1e134a4086ab51d43d2e6730914c523 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -124,12 +124,6 @@ /* end private */ -/* Define to 1 if variadic templates are supported */ -#cmakedefine HAVE_VARIADIC_TEMPLATES 1 - -/* Define to 1 if SFINAE on variadic template constructors is fully supported */ -#cmakedefine HAVE_VARIADIC_CONSTRUCTOR_SFINAE 1 - /* Define to 1 if rvalue references are supported */ #cmakedefine HAVE_RVALUE_REFERENCES 1 diff --git a/dune/common/debugallocator.hh b/dune/common/debugallocator.hh index fd50ab0445ef799e3153301b20168252dedb17dc..1327a2996927105cab46ddc9c0cbda710a2976a7 100644 --- a/dune/common/debugallocator.hh +++ b/dune/common/debugallocator.hh @@ -277,9 +277,8 @@ namespace Dune { ::new((void*)p)T(val); } -#if ( HAVE_VARIADIC_TEMPLATES && HAVE_RVALUE_REFERENCES ) || DOXYGEN +#if HAVE_RVALUE_REFERENCES || DOXYGEN //! construct an object of type T from variadic parameters - //! \note works only with newer C++ compilers template<typename ... _Args> void construct(pointer p, _Args&&... __args) { diff --git a/dune/common/mallocallocator.hh b/dune/common/mallocallocator.hh index 8b27c073708fe07fb7984babf3c1ca1cf3925807..4892e947fd4c1527efbce5fbb3dbe2fa2c8fe4af 100644 --- a/dune/common/mallocallocator.hh +++ b/dune/common/mallocallocator.hh @@ -82,9 +82,8 @@ namespace Dune { ::new((void*)p)T(val); } -#if ( HAVE_VARIADIC_TEMPLATES && HAVE_RVALUE_REFERENCES ) || DOXYGEN +#if HAVE_RVALUE_REFERENCES || DOXYGEN //! construct an object of type T from variadic parameters - //! \note works only with newer C++ compilers template<typename ... _Args> void construct(pointer p, _Args&&... __args) { diff --git a/dune/common/tupleutility.hh b/dune/common/tupleutility.hh index cf0abf8196eefabd30793b9e8e221b1026670036..41ca3170ad36dbb2d03a39c5b275a27f82c4a4a5 100644 --- a/dune/common/tupleutility.hh +++ b/dune/common/tupleutility.hh @@ -1596,67 +1596,11 @@ namespace Dune { #ifndef DOXYGEN -#if HAVE_VARIADIC_TEMPLATES template<class... TupleArgs, class T> struct PushBackTuple<typename Dune::tuple<TupleArgs...>, T> { typedef typename Dune::tuple<TupleArgs..., T> type; }; -#else - template<class T> - struct PushBackTuple< Dune::tuple<>, T> - { - typedef typename Dune::tuple<T> type; - }; - - template< class T1, class T> - struct PushBackTuple< Dune::tuple<T1>, T> - { - typedef typename Dune::tuple<T1, T> type; - }; - - template< class T1, class T2, class T> - struct PushBackTuple< Dune::tuple<T1, T2>, T> - { - typedef typename Dune::tuple<T1, T2, T> type; - }; - - template< class T1, class T2, class T3, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T> type; - }; - - template< class T1, class T2, class T3, class T4, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3, T4>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T4, T> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3, T4, T5>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T4, T5, T> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3, T4, T5, T6>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T4, T5, T6, T> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3, T4, T5, T6, T7>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T4, T5, T6, T7, T> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T> - struct PushBackTuple< Dune::tuple<T1, T2, T3, T4, T5, T6, T7, T8>, T> - { - typedef typename Dune::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T> type; - }; -#endif // HAVE_VARIADIC_TEMPLATES #endif @@ -1691,67 +1635,11 @@ namespace Dune { #ifndef DOXYGEN -#if HAVE_VARIADIC_TEMPLATES template<class... TupleArgs, class T> struct PushFrontTuple<typename Dune::tuple<TupleArgs...>, T> { typedef typename Dune::tuple<T, TupleArgs...> type; }; -#else - template<class T> - struct PushFrontTuple< Dune::tuple<>, T> - { - typedef typename Dune::tuple<T> type; - }; - - template< class T1, class T> - struct PushFrontTuple< Dune::tuple<T1>, T> - { - typedef typename Dune::tuple<T, T1> type; - }; - - template< class T1, class T2, class T> - struct PushFrontTuple< Dune::tuple<T1, T2>, T> - { - typedef typename Dune::tuple<T, T1, T2> type; - }; - - template< class T1, class T2, class T3, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3> type; - }; - - template< class T1, class T2, class T3, class T4, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3, T4>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3, T4> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3, T4, T5>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3, T4, T5> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3, T4, T5, T6>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3, T4, T5, T6> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3, T4, T5, T6, T7>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3, T4, T5, T6, T7> type; - }; - - template< class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T> - struct PushFrontTuple< Dune::tuple<T1, T2, T3, T4, T5, T6, T7, T8>, T> - { - typedef typename Dune::tuple<T, T1, T2, T3, T4, T5, T6, T7, T8> type; - }; -#endif // HAVE_VARIADIC_TEMPLATES #endif diff --git a/m4/CMakeLists.txt b/m4/CMakeLists.txt index ad4a1af4643f0166c82340473087d563f130bd92..e089cce1ba0ca52fbb03e52e1de0d3730e9704d4 100644 --- a/m4/CMakeLists.txt +++ b/m4/CMakeLists.txt @@ -10,8 +10,6 @@ install(PROGRAMS cxx0x_compiler.m4 cxx0x_rvaluereference.m4 cxx0x_nullptr.m4 - cxx0x_variadic.m4 - cxx0x_variadic_constructor_sfinae.m4 cxx11_constexpr.m4 cxx11_final.m4 dune.m4 diff --git a/m4/Makefile.am b/m4/Makefile.am index e297c5179db47f3eb66f76b80227c723ee4bbef0..f1672927f68c4e4ab2ea6bf08fa455ea60e7c590 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -13,8 +13,6 @@ ALLM4S = \ cxx0x_compiler.m4 \ cxx0x_rvaluereference.m4 \ cxx0x_nullptr.m4 \ - cxx0x_variadic.m4 \ - cxx0x_variadic_constructor_sfinae.m4 \ cxx11_constexpr.m4 \ cxx11_final.m4 \ dune.m4 \ diff --git a/m4/cxx0x_variadic.m4 b/m4/cxx0x_variadic.m4 deleted file mode 100644 index fadecf0f24e1c6ab158c2af5856a5043035cecc3..0000000000000000000000000000000000000000 --- a/m4/cxx0x_variadic.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# tests for C++0x variadic template support -# the associated macro is called HAVE_VARIADIC_TEMPLATES - -AC_DEFUN([VARIADIC_TEMPLATES_CHECK],[ - AC_CACHE_CHECK([whether variadic templates are supported], dune_cv_variadic_templates_support, [ - AC_REQUIRE([AC_PROG_CXX]) - AC_REQUIRE([GXX0X]) - AC_LANG_PUSH([C++]) - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([#include<cassert> - - template<typename... T> - int addints(T... x); - - int add_ints() - { - return 0; - } - - template<typename T1, typename... T> - int add_ints(T1 t1, T... t) - { - return t1 + add_ints(t...); - }], - [ - assert( 5 == add_ints(9,3,-5,-2) ); - return 0; - ])], - dune_cv_variadic_templates_support=yes, - dune_cv_variadic_templates_support=no) - AC_LANG_POP - ]) - if test "x$dune_cv_variadic_templates_support" = xyes; then - AC_DEFINE(HAVE_VARIADIC_TEMPLATES, 1, [Define to 1 if variadic templates are supported]) - fi -]) diff --git a/m4/cxx0x_variadic_constructor_sfinae.m4 b/m4/cxx0x_variadic_constructor_sfinae.m4 deleted file mode 100644 index f8adc4fe8b379c7173665cb7e01ccf04ed5fb0e9..0000000000000000000000000000000000000000 --- a/m4/cxx0x_variadic_constructor_sfinae.m4 +++ /dev/null @@ -1,50 +0,0 @@ -# tests whether the compiler supports SFINAE on variadic template constructors -# within template classes. GCC 4.3 fails this test. -# the associated macro is called HAVE_VARIADIC_CONSTRUCTOR_SFINAE - -AC_DEFUN([VARIADIC_CONSTRUCTOR_SFINAE_CHECK],[ - AC_CACHE_CHECK([whether SFINAE on variadic template constructors is fully supported], - dune_cv_variadic_constructor_sfinae_support, [ - AC_REQUIRE([AC_PROG_CXX]) - AC_REQUIRE([GXX0X]) - AC_LANG_PUSH([C++]) - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([ - #include <functional> - - template<typename... U> - struct A - { - - template<typename... T, - typename = typename std::enable_if<(sizeof...(T) < 2)>::type - > - A(T... t) - : i(1) - {} - - template<typename... T, - typename = typename std::enable_if<(sizeof...(T) >= 2)>::type, - typename = void - > - A(T... t) - : i(-1) - {} - - A() - : i(1) - {} - - int i; - };], - [ - return (A<int>().i + A<int>(2).i + A<int>("foo",3.4).i + A<int>(8,'a',A<int>()).i == 0 ? 0 : 1); - ])], - dune_cv_variadic_constructor_sfinae_support=yes, - dune_cv_variadic_constructor_sfinae_support=no) - AC_LANG_POP - ]) - AS_IF([test "x$dune_cv_variadic_constructor_sfinae_support" = xyes],[ - AC_DEFINE(HAVE_VARIADIC_CONSTRUCTOR_SFINAE, 1, [Define to 1 if SFINAE on variadic template constructors is fully supported]) - ]) -]) diff --git a/m4/dune_common.m4 b/m4/dune_common.m4 index e6e1b5332a2eab5619ce18a1867952b498874d6f..ddf634cdadc4ff1970eafb94d76c98a5b845c6e8 100644 --- a/m4/dune_common.m4 +++ b/m4/dune_common.m4 @@ -20,7 +20,6 @@ AC_DEFUN([DUNE_COMMON_CHECKS], AC_REQUIRE([DUNE_CHECK_COMPILER]) AC_REQUIRE([GXX0X]) AC_REQUIRE([NULLPTR_CHECK]) - AC_REQUIRE([VARIADIC_TEMPLATES_CHECK]) AC_REQUIRE([RVALUE_REFERENCES_CHECK]) AC_REQUIRE([CXX11_CONSTEXPR_CHECK]) AC_REQUIRE([DUNE_BOOST_BASE])