Modernize STL usage
[alexxy/gromacs.git] / src / gromacs / simd / simd.h
index 537046645a9b2080ae4024bfc6dcadb9e7e794c4..d67ce0bbab84b48090b0cae179ce69e54d5aa51c 100644 (file)
@@ -482,11 +482,12 @@ struct SimdTraits<SimdDInt32>
     using tag                  = SimdDInt32Tag;
 };
 #endif
-
+template<typename T>
+using SimdTraitsT = typename SimdTraits<T>::type;
 template<typename T>
 struct SimdTraits<const T>
 {
-    using type                 = const typename SimdTraits<T>::type;
+    using type                 = const SimdTraitsT<T>;
     static constexpr int width = SimdTraits<T>::width;
     using tag                  = typename SimdTraits<T>::tag;
 };
@@ -503,8 +504,7 @@ struct SimdTraits<const T>
  * \return   Loaded value
  */
 template<typename T>
-static inline std::remove_const_t<T>
-load(const typename internal::SimdTraits<T>::type* m) // disabled by SFINAE for non-SIMD types
+static inline std::remove_const_t<T> load(const internal::SimdTraitsT<T>* m) // disabled by SFINAE for non-SIMD types
 {
     return simdLoad(m, typename internal::SimdTraits<T>::tag());
 }
@@ -516,13 +516,13 @@ static inline T
  * 2) load(real*); template parameter is mandatory because otherwise ambiguity is
  *    created. The dependent type disables type deduction.
  */
-load(const std::enable_if_t<std::is_arithmetic<T>::value, T> *m)
+load(const std::enable_if_t<std::is_arithmetic_v<T>, T> *m)
 {
     return *m;
 }
 
 template<typename T, size_t N>
-static inline T gmx_simdcall load(const AlignedArray<typename internal::SimdTraits<T>::type, N>& m)
+static inline T gmx_simdcall load(const AlignedArray<internal::SimdTraitsT<T>, N>& m)
 {
     return simdLoad(m.data(), typename internal::SimdTraits<T>::tag());
 }
@@ -534,19 +534,19 @@ static inline T gmx_simdcall load(const AlignedArray<typename internal::SimdTrai
  * \return Loaded SimdFloat/Double/Int or basic scalar type
  */
 template<typename T>
-static inline T loadU(const typename internal::SimdTraits<T>::type* m)
+static inline T loadU(const internal::SimdTraitsT<T>* m)
 {
     return simdLoadU(m, typename internal::SimdTraits<T>::tag());
 }
 
 template<typename T>
-static inline T loadU(const std::enable_if_t<std::is_arithmetic<T>::value, T>* m)
+static inline T loadU(const std::enable_if_t<std::is_arithmetic_v<T>, T>* m)
 {
     return *m;
 }
 
 template<typename T, size_t N>
-static inline T gmx_simdcall loadU(const AlignedArray<typename internal::SimdTraits<T>::type, N>& m)
+static inline T gmx_simdcall loadU(const AlignedArray<internal::SimdTraitsT<T>, N>& m)
 {
     return simdLoadU(m.data(), typename internal::SimdTraits<T>::tag());
 }
@@ -621,16 +621,18 @@ struct Simd4Traits<Simd4Double>
     using type = double;
 };
 #endif
+template<typename T>
+using Simd4TraitsT = typename Simd4Traits<T>::type;
 } // namespace internal
 
 #if GMX_SIMD4_HAVE_REAL
 template<typename T>
-T load(const typename internal::Simd4Traits<T>::type* m)
+T load(const internal::Simd4TraitsT<T>* m)
 {
     return load4(m);
 }
 template<typename T>
-T loadU(const typename internal::Simd4Traits<T>::type* m)
+T loadU(const internal::Simd4TraitsT<T>* m)
 {
     return load4U(m);
 }