From 41a83732654fbc474e94c499557e508af353a29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=BCthing?= <muething@dune-project.org> Date: Wed, 24 Jul 2013 08:22:30 +0200 Subject: [PATCH] [Build System] Add test for C++11 initializer list --- cmake/modules/FindCXX11Features.cmake | 23 +++++++++++++++++ config.h.cmake | 3 +++ m4/CMakeLists.txt | 1 + m4/Makefile.am | 1 + m4/cxx11_initializer_list.m4 | 37 +++++++++++++++++++++++++++ m4/dune_common.m4 | 1 + 6 files changed, 66 insertions(+) create mode 100644 m4/cxx11_initializer_list.m4 diff --git a/cmake/modules/FindCXX11Features.cmake b/cmake/modules/FindCXX11Features.cmake index fbb96ce4e..ce402a962 100644 --- a/cmake/modules/FindCXX11Features.cmake +++ b/cmake/modules/FindCXX11Features.cmake @@ -288,4 +288,27 @@ CHECK_CXX_SOURCE_COMPILES(" } " HAVE_RVALUE_REFERENCES ) + +# initializer list +CHECK_CXX_SOURCE_COMPILES(" + #include <initializer_list> + #include <vector> + + struct A + { + A(std::initializer_list<int> il) + : vec(il) + {} + + std::vector<int> vec; + }; + + int main(void) + { + A a{1,3,4,5}; + return 0; + } +" HAVE_INITIALIZER_LIST +) + cmake_pop_check_state() diff --git a/config.h.cmake b/config.h.cmake index 1ded4db4d..745307314 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -154,6 +154,9 @@ /* Define to 1 if rvalue references are supported */ #cmakedefine HAVE_RVALUE_REFERENCES 1 +/* Define to 1 if initializer list is supported */ +#cmakedefine HAVE_INITIALIZER_LIST 1 + /* Include always useful headers */ #include <dune/common/deprecated.hh> #include <dune/common/unused.hh> diff --git a/m4/CMakeLists.txt b/m4/CMakeLists.txt index 5a842931e..2dad49170 100644 --- a/m4/CMakeLists.txt +++ b/m4/CMakeLists.txt @@ -13,6 +13,7 @@ install(PROGRAMS cxx0x_static_assert.m4 cxx0x_variadic.m4 cxx0x_variadic_constructor_sfinae.m4 + cxx11_initializer_list.m4 dune.m4 dune_all.m4 dune_autobuild.m4 diff --git a/m4/Makefile.am b/m4/Makefile.am index 68a0b3f51..e16142f8b 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -17,6 +17,7 @@ ALLM4S = \ cxx0x_static_assert.m4 \ cxx0x_variadic.m4 \ cxx0x_variadic_constructor_sfinae.m4 \ + cxx11_initializer_list.m4 \ dune.m4 \ dune_all.m4 \ dune_autobuild.m4 \ diff --git a/m4/cxx11_initializer_list.m4 b/m4/cxx11_initializer_list.m4 new file mode 100644 index 000000000..04fc9ff86 --- /dev/null +++ b/m4/cxx11_initializer_list.m4 @@ -0,0 +1,37 @@ +# tests for C++11 initializer list support +# the associated macro is called HAVE_INITIALIZER_LIST + +AC_DEFUN([INITIALIZER_LIST_CHECK],[ + AC_CACHE_CHECK([whether std::initializer_list is supported], dune_cv_initializer_list_support, [ + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([GXX0X]) + AC_LANG_PUSH([C++]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([ + + #include <initializer_list> + #include <vector> + + struct A + { + + A(std::initializer_list<int> il) + : vec(il) + {} + + std::vector<int> vec; + }; + + ], + [ + A a{1,3,4,5}; + return 0; + ])], + dune_cv_initializer_list_support=yes, + dune_cv_initializer_list_support=no) + AC_LANG_POP + ]) + if test "x$dune_cv_initializer_list_support" = xyes; then + AC_DEFINE(HAVE_INITIALIZER_LIST, 1, [Define to 1 if std::initializer_list is supported]) + fi +]) diff --git a/m4/dune_common.m4 b/m4/dune_common.m4 index 651a23e09..5a9735fec 100644 --- a/m4/dune_common.m4 +++ b/m4/dune_common.m4 @@ -24,6 +24,7 @@ AC_DEFUN([DUNE_COMMON_CHECKS], AC_REQUIRE([SHARED_PTR]) AC_REQUIRE([VARIADIC_TEMPLATES_CHECK]) AC_REQUIRE([RVALUE_REFERENCES_CHECK]) + AC_REQUIRE([INITIALIZER_LIST_CHECK]) AC_REQUIRE([DUNE_BOOST_BASE]) AC_REQUIRE([MAKE_SHARED]) AC_REQUIRE([DUNE_LINKCXX]) -- GitLab