From cdb24ff2c120c83517b0e458b1d31aec5000d686 Mon Sep 17 00:00:00 2001
From: Denis Davydov <davydden@gmail.com>
Date: Tue, 26 Feb 2019 18:32:37 +0100
Subject: [PATCH] make old compilers happy

---
 include/deal.II/matrix_free/fe_evaluation.h | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/include/deal.II/matrix_free/fe_evaluation.h b/include/deal.II/matrix_free/fe_evaluation.h
index ac87eea988..337846d4bd 100644
--- a/include/deal.II/matrix_free/fe_evaluation.h
+++ b/include/deal.II/matrix_free/fe_evaluation.h
@@ -3423,10 +3423,13 @@ namespace internal
     // finally here we check if our detector has non-void return type
     // T::value_type. This will happen if compiler can use second detector,
     // otherwise SFINAE let it work with the more general first one that is void
-    static constexpr bool value =
+    static const bool value =
       !std::is_same<void, decltype(detect(std::declval<T>()))>::value;
   };
 
+  // We need to have a separate declaration for static const members
+  template <typename T>
+  const bool has_local_element<T>::value;
 
   // same as above to check
   // bool T::partitioners_are_compatible(const Utilities::MPI::Partitioner &)
@@ -3444,10 +3447,13 @@ namespace internal
     detect(const U &);
 
   public:
-    static constexpr bool value =
+    static const bool value =
       std::is_same<bool, decltype(detect(std::declval<T>()))>::value;
   };
 
+  // We need to have a separate declaration for static const members
+  template <typename T>
+  const bool has_partitioners_are_compatible<T>::value;
 
 
   // same as above to check
@@ -3464,10 +3470,13 @@ namespace internal
     detect(const U &);
 
   public:
-    static constexpr bool value =
+    static const bool value =
       !std::is_same<void, decltype(detect(std::declval<T>()))>::value;
   };
 
+  // We need to have a separate declaration for static const members
+  template <typename T>
+  const bool has_begin<T>::value;
 
 
   // type trait for vector T and Number to see if
@@ -3478,12 +3487,15 @@ namespace internal
   template <typename T, typename Number>
   struct is_vectorizable
   {
-    static constexpr bool value =
+    static const bool value =
       has_begin<T>::value &&
       (has_local_element<T>::value || is_serial_vector<T>::value) &&
       std::is_same<typename T::value_type, Number>::value;
   };
 
+  // We need to have a separate declaration for static const members
+  template <typename T, typename Number>
+  const bool is_vectorizable<T, Number>::value;
 
 
   // access to generic const vectors that have operator ().
-- 
2.39.5