[Dune-devel] The file cxx11.hh

Oliver Sander sander at igpm.rwth-aachen.de
Tue Oct 1 12:05:59 CEST 2013


And just to make this a little more complicated: unused.hh and deprecated.hh are
neither std nor c++11: they are nonstandard compiler extensions.

:-)
Oliver

Am 01.10.2013 11:09, schrieb Christoph_Gersbacher:
> Hi,
> 
> on the developer meeting in Aachen we decided to introduce a new namespace Dune::std for STL like containers and the tuples stuff. Didn't we plan to introduce a subdirectory for the respective headers
> as well? If yes, I'd suggest to place the C++11 headers in that same directory. Having two folders, say 'dune/common/std/' and 'dune/common/c++11', would leave me unsure about where to find e. g. the
> headers shared_ptr.hh or tuples.hh. How about a subdirectory 'dune/common/std/c++11/' instead?
> 
> Best,
> 
> Christoph
> 
> On 10/01/2013 10:45 AM, Oliver Sander wrote:
>> Am 01.10.2013 10:26, schrieb Christian Engwer:
>>> On Tue, Oct 01, 2013 at 10:20:20AM +0200, Martin Nolte wrote:
>>>> Hi Oli,
>>>>
>>>> I don't have a strong opinion on this. Feel free to rename the file
>>>> to constexpr.hh.
>>>>
>>>> However, my idea was to avoid cluttering dune-common with lots of
>>>> header files for c++11 compatiblity (we already have nullptr.hh,
>>>> staticassert.hh, ...). Therefore, I added 1 single header file that
>>>> should contain all those macros and other fallback stuff. It's just
>>>> a suggestion (the corresponding eMail was intended to follow later
>>>> today).
>>> How about a subdirectory c++11 ?
>>>
>> I wouldn't mind that.
>>
>> -- 
>> Oliver
>>
>>
>>> Christian
>>>
>>>> Best,
>>>>
>>>> Martin
>>>>
>>>> On 10/01/2013 10:00 AM, Oliver Sander wrote:
>>>>> 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
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dune-devel mailing list
>>>>> Dune-devel at dune-project.org
>>>>> http://lists.dune-project.org/mailman/listinfo/dune-devel
>>>>>
>>>> -- 
>>>> Dr. Martin Nolte <nolte at mathematik.uni-freiburg.de>
>>>>
>>>> Universität Freiburg                                   phone: +49-761-203-5630
>>>> Abteilung für angewandte Mathematik                    fax:   +49-761-203-5632
>>>> Hermann-Herder-Straße 10
>>>> 79104 Freiburg, Germany
>>>>
>>>> _______________________________________________
>>>> Dune-devel mailing list
>>>> Dune-devel at dune-project.org
>>>> http://lists.dune-project.org/mailman/listinfo/dune-devel
>>>>
>>
>>
>>
>> _______________________________________________
>> Dune-devel mailing list
>> Dune-devel at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune-devel
> 
> 
> 
> 
> _______________________________________________
> Dune-devel mailing list
> Dune-devel at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-devel
> 


-------------- 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/93ca562c/attachment.sig>


More information about the Dune-devel mailing list