[Dune-devel] The file cxx11.hh [Was: [Dune-Commit] [Commit] dune-common - 45990b6: [c++11] add support for C++11 constexpr]

Oliver Sander sander at igpm.rwth-aachen.de
Tue Oct 1 10:00:24 CEST 2013


Hi Martin,
is cxx11.hh a good name for the file containing the constexpr wrapper?
From the name alone I'd be hard-pressed to guess what it contains.
Can we change the name to constexpr.hh?  That would be more consistent
with unused.hh and deprecated.hh.
Best,
Oliver

Am 01.10.2013 08:40, schrieb Martin Nolte:
> New commit, appeared at Tue Oct  1 08:40:50 2013 +0200
> as part of the following ref changes:
> 
>     branch refs/heads/master    updated from b6e7446 -> 45990b6
> 
> Browsable version: http://cgit.dune-project.org/repositories/dune-common/commit/?id=45990b699256890185c365419ef75c5c88c33f12
> 
> ======================================================================
> 
> commit 45990b699256890185c365419ef75c5c88c33f12
> Author: Martin Nolte <nolte at mathematik.uni-freiburg.de>
> Date:   Tue Oct 1 08:37:28 2013 +0200
> 
>     [c++11] add support for C++11 constexpr
>     
>     As decided on the developer meeting in Aachen, we support (but do not
>     rely on) the C++11 keyword constexpr. This patch adds an m4-check for
>     constexpr and a header (cxx11.hh) defining a macro DUNE_CONSTEXPR either
>     as constexpr or empty (depending on the compiler support for it). It is
>     then used in FieldVector and FieldMatrix on size, rows, and cols.
> 
>  dune/common/CMakeLists.txt |  1 +
>  dune/common/Makefile.am    |  1 +
>  dune/common/cxx11.hh       | 10 ++++++++++
>  dune/common/fmatrix.hh     |  9 +++++----
>  dune/common/fvector.hh     | 10 ++++++++--
>  m4/cxx11_constexpr.m4      | 28 ++++++++++++++++++++++++++++
>  m4/dune_common.m4          |  1 +
>  7 files changed, 54 insertions(+), 6 deletions(-)
>  create mode 100644 dune/common/cxx11.hh
>  create mode 100644 m4/cxx11_constexpr.m4
> 
> 
> 
> diff --git a/dune/common/CMakeLists.txt b/dune/common/CMakeLists.txt
> index 43fe8fc..f1dc93b 100644
> --- a/dune/common/CMakeLists.txt
> +++ b/dune/common/CMakeLists.txt
> @@ -31,6 +31,7 @@ install(FILES
>          bitsetvector.hh
>          classname.hh
>          collectivecommunication.hh
> +        cxx11.hh
>          debugallocator.hh
>          debugstream.hh
>          deprecated.hh
> diff --git a/dune/common/Makefile.am b/dune/common/Makefile.am
> index 75e9d54..9a645f6 100644
> --- a/dune/common/Makefile.am
> +++ b/dune/common/Makefile.am
> @@ -28,6 +28,7 @@ commoninclude_HEADERS = 			\
>  	bitsetvector.hh				\
>  	classname.hh				\
>  	collectivecommunication.hh		\
> +	cxx11.hh				\
>  	debugallocator.hh			\
>  	debugstream.hh				\
>  	deprecated.hh				\
> diff --git a/dune/common/cxx11.hh b/dune/common/cxx11.hh
> new file mode 100644
> index 0000000..8ba3101
> --- /dev/null
> +++ b/dune/common/cxx11.hh
> @@ -0,0 +1,10 @@
> +#ifndef DUNE_COMMON_CXX11_HH
> +#define DUNE_COMMON_CXX11_HH
> +
> +#if HAVE_CONSTEXPR
> +#define DUNE_CONSTEXPR constexpr
> +#else // #if HAVE_CONSTEXPR
> +#define DUNE_CONSTEXPR
> +#endif // #else // #if HAVE_CONSTEXPR
> +
> +#endif // #ifndef DUNE_COMMON_CXX11_HH
> diff --git a/dune/common/fmatrix.hh b/dune/common/fmatrix.hh
> index 826399e..adfdf61 100644
> --- a/dune/common/fmatrix.hh
> +++ b/dune/common/fmatrix.hh
> @@ -8,6 +8,7 @@
>  #include <cstddef>
>  #include <iostream>
>  
> +#include <dune/common/cxx11.hh>
>  #include <dune/common/exceptions.hh>
>  #include <dune/common/fvector.hh>
>  #include <dune/common/densematrix.hh>
> @@ -168,8 +169,8 @@ namespace Dune
>      }
>  
>      // make this thing a matrix
> -    size_type mat_rows() const { return ROWS; }
> -    size_type mat_cols() const { return COLS; }
> +    DUNE_CONSTEXPR size_type mat_rows() const { return ROWS; }
> +    DUNE_CONSTEXPR size_type mat_cols() const { return COLS; }
>  
>      row_reference mat_access ( size_type i )
>      {
> @@ -270,8 +271,8 @@ namespace Dune
>      }
>  
>      // make this thing a matrix
> -    size_type mat_rows() const { return 1; }
> -    size_type mat_cols() const { return 1; }
> +    DUNE_CONSTEXPR size_type mat_rows() const { return 1; }
> +    DUNE_CONSTEXPR size_type mat_cols() const { return 1; }
>  
>      row_reference mat_access ( size_type i )
>      {
> diff --git a/dune/common/fvector.hh b/dune/common/fvector.hh
> index 6084355..4d113c8 100644
> --- a/dune/common/fvector.hh
> +++ b/dune/common/fvector.hh
> @@ -11,6 +11,8 @@
>  #include <cstring>
>  #include <utility>
>  
> +#include <dune/common/cxx11.hh>
> +
>  #include "typetraits.hh"
>  #include "exceptions.hh"
>  #include "array.hh"
> @@ -156,8 +158,10 @@ namespace Dune {
>      }
>      using Base::operator=;
>  
> +    DUNE_CONSTEXPR size_type size () const { return vec_size(); }
> +
>      // make this thing a vector
> -    size_type vec_size() const { return SIZE; }
> +    DUNE_CONSTEXPR size_type vec_size () const { return SIZE; }
>      K & vec_access(size_type i) { return _data[i]; }
>      const K & vec_access(size_type i) const { return _data[i]; }
>    private:
> @@ -243,8 +247,10 @@ namespace Dune {
>        return *this;
>      }
>  
> +    DUNE_CONSTEXPR size_type size () const { return vec_size(); }
> +
>      //===== forward methods to container
> -    size_type vec_size() const { return 1; }
> +    DUNE_CONSTEXPR size_type vec_size () const { return 1; }
>      K & vec_access(size_type i)
>      {
>        assert(i == 0);
> diff --git a/m4/cxx11_constexpr.m4 b/m4/cxx11_constexpr.m4
> new file mode 100644
> index 0000000..12b7b7a
> --- /dev/null
> +++ b/m4/cxx11_constexpr.m4
> @@ -0,0 +1,28 @@
> +# tests for C++11 constexpr support
> +# the associated macro is called HAVE_CONSTEXPR
> +
> +AC_DEFUN([CXX11_CONSTEXPR_CHECK],[
> +  AC_CACHE_CHECK([for C++11 constexpr], dune_cv_cxx11_constexpr_support, [
> +    AC_REQUIRE([AC_PROG_CXX])
> +    AC_REQUIRE([GXX0X])
> +    AC_LANG_PUSH([C++])
> +    AC_COMPILE_IFELSE([
> +      AC_LANG_PROGRAM([
> +          constexpr int foo () { return 0; }
> +
> +          template< int v >
> +          struct A
> +          {
> +            static const int value = v;
> +          };
> +        ],[
> +          return A< foo() >::value;
> +        ])],
> +      dune_cv_cxx11_constexpr_support=yes,
> +      dune_cv_cxx11_constexpr_support=no)
> +    AC_LANG_POP
> +  ])
> +  if test "x$dune_cv_cxx11_constexpr_support" = xyes; then
> +    AC_DEFINE(HAVE_CONSTEXPR, 1, [Define to 1 if C++11 constexpr is supported])
> +  fi
> +])
> diff --git a/m4/dune_common.m4 b/m4/dune_common.m4
> index d9debce..5b13851 100644
> --- a/m4/dune_common.m4
> +++ b/m4/dune_common.m4
> @@ -26,6 +26,7 @@ AC_DEFUN([DUNE_COMMON_CHECKS],
>    AC_REQUIRE([RVALUE_REFERENCES_CHECK])
>    AC_REQUIRE([INITIALIZER_LIST_CHECK])
>    AC_REQUIRE([CXX11_CONDITIONAL_CHECK])
> +  AC_REQUIRE([CXX11_CONSTEXPR_CHECK])
>    AC_REQUIRE([DUNE_BOOST_BASE])
>    AC_REQUIRE([MAKE_SHARED])
>    AC_REQUIRE([DUNE_LINKCXX])
> 
> _______________________________________________
> Dune-Commit mailing list
> Dune-Commit at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-commit
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 551 bytes
Desc: OpenPGP digital signature
URL: <https://lists.dune-project.org/pipermail/dune-devel/attachments/20131001/fb4dbd21/attachment.sig>


More information about the Dune-devel mailing list