]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use C++17-style fold expressions. 15618/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Mon, 3 Jul 2023 15:32:14 +0000 (09:32 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Mon, 3 Jul 2023 15:32:14 +0000 (09:32 -0600)
include/deal.II/base/template_constraints.h

index d298064240ae73f6563457d8b55e1fb04f0f0672..5eb2b45d3eec876ff4b85081e51a5fac40462ae6 100644 (file)
@@ -165,15 +165,6 @@ namespace internal
 {
   namespace TemplateConstraints
   {
-    // TODO: Once we are able to use DEAL_II_HAVE_CXX17, the following classes
-    // can be made much simpler with the help of fold expressions, see
-    // https://en.cppreference.com/w/cpp/language/fold
-
-    // helper struct for is_base_of_all and all_same_as
-    template <bool... Values>
-    struct BoolStorage;
-
-
     /**
      * A helper class whose `value` member is true or false depending on
      * whether all of the given boolean template arguments are `true`.
@@ -185,9 +176,7 @@ namespace internal
     template <bool... Values>
     struct all_true
     {
-      static constexpr bool value =
-        std::is_same<BoolStorage<Values..., true>,
-                     BoolStorage<true, Values...>>::value;
+      static constexpr bool value = (Values && ...);
     };
 
 
@@ -196,20 +185,9 @@ namespace internal
      * boolean template arguments are true.
      */
     template <bool... Values>
-    struct any_true;
-
-
-    template <bool V1, bool... Values>
-    struct any_true<V1, Values...>
-    {
-      static constexpr bool value = V1 || any_true<Values...>::value;
-    };
-
-
-    template <>
-    struct any_true<>
+    struct any_true
     {
-      static constexpr bool value = false;
+      static constexpr bool value = (Values || ...);
     };
   } // namespace TemplateConstraints
 } // namespace internal

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.