From c12886b4feae04596098741d741b9e9deaaa49e9 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Sun, 22 Jul 2018 01:30:26 +0200
Subject: [PATCH] Provide explicit default constructors for TinyMatrix and
 TinyVector

g++-7 does not like the mix of constexpr and these implicit constructors
---
 src/algebra/TinyMatrix.hpp | 14 +++++++-------
 src/algebra/TinyVector.hpp | 12 +++---------
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/src/algebra/TinyMatrix.hpp b/src/algebra/TinyMatrix.hpp
index 2eced15cf..eda3b5f19 100644
--- a/src/algebra/TinyMatrix.hpp
+++ b/src/algebra/TinyMatrix.hpp
@@ -46,11 +46,8 @@ public:
   KOKKOS_INLINE_FUNCTION
   constexpr friend TinyMatrix operator*(const T& t, const TinyMatrix& A)
   {
-    TinyMatrix tA;
-    for (size_t i=0; i<N*N; ++i) {
-      tA.m_values[i] = t * A.m_values[i];
-    }
-    return std::move(tA);
+    TinyMatrix B = A;
+    return std::move(B *= t);
   }
 
   KOKKOS_INLINE_FUNCTION
@@ -242,7 +239,10 @@ public:
   }
 
   KOKKOS_INLINE_FUNCTION
-  constexpr TinyMatrix() noexcept = default;
+  constexpr TinyMatrix() noexcept
+  {
+    ;
+  }
 
   KOKKOS_INLINE_FUNCTION
   constexpr TinyMatrix(const ZeroType& z) noexcept
@@ -273,7 +273,7 @@ public:
   }
 
   KOKKOS_INLINE_FUNCTION
-  constexpr TinyMatrix(TinyMatrix&& A) noexcept = default;
+  TinyMatrix(TinyMatrix&& A) noexcept = default;
 
   KOKKOS_INLINE_FUNCTION
   ~TinyMatrix()=default;
diff --git a/src/algebra/TinyVector.hpp b/src/algebra/TinyVector.hpp
index 826ba9819..c783bb796 100644
--- a/src/algebra/TinyVector.hpp
+++ b/src/algebra/TinyVector.hpp
@@ -78,11 +78,8 @@ class TinyVector
   KOKKOS_INLINE_FUNCTION
   constexpr friend TinyVector operator*(const T& t, const TinyVector& v)
   {
-    TinyVector tv;
-    for (size_t i=0; i<N; ++i) {
-      tv.m_values[i] = t * v.m_values[i];
-    }
-    return std::move(tv);
+    TinyVector w = v;
+    return std::move(w*=t);
   }
 
   KOKKOS_INLINE_FUNCTION
@@ -230,10 +227,7 @@ class TinyVector
   constexpr TinyVector(TinyVector&& v) noexcept = default;
 
   KOKKOS_INLINE_FUNCTION
-  ~TinyVector() noexcept
-  {
-    ;
-  }
+  ~TinyVector() noexcept = default;
 };
 
 template <size_t N, typename T>
-- 
GitLab