diff --git a/src/amdis/common/TypeTraits.hpp b/src/amdis/common/TypeTraits.hpp
index f1af06aeecd86e8eaf21b062df102b9e5003aad7..743bc76265ad8a3b334f4238f0dcd80202660022 100644
--- a/src/amdis/common/TypeTraits.hpp
+++ b/src/amdis/common/TypeTraits.hpp
@@ -97,4 +97,29 @@ namespace AMDiS
     return std::make_unique<TYPEOF(obj)>(FWD(obj));
   }
 
+
+
+  template <template <class...> class>
+  constexpr bool is_template() { return true; }
+
+#if AMDIS_HAS_CXX_AUTO_TEMPLATE_PARAMETER
+  template <template <class,auto...> class>
+  constexpr bool is_template() { return true; }
+#else
+  template <template <class,int...> class>
+  constexpr bool is_template() { return true; }
+
+  template <template <class,std::size_t...> class>
+  constexpr bool is_template() { return true; }
+#endif
+
+  template <class>
+  constexpr bool is_template() { return false; }
+
+
+  template <bool... b>
+  using enable_if_all_t
+    = std::enable_if_t<std::is_same<std::integer_sequence<bool,true,b...>,
+                                    std::integer_sequence<bool,b...,true>>::value>;
+
 } // end namespace AMDiS