diff --git a/src/mesh/ItemValueUtils.hpp b/src/mesh/ItemValueUtils.hpp
index 9c36db12811d63b1942911afb12d514ebbdd213d..ef99f59e44f9f71a01267ca0c424220241573f60 100644
--- a/src/mesh/ItemValueUtils.hpp
+++ b/src/mesh/ItemValueUtils.hpp
@@ -20,7 +20,8 @@ min(const ItemValue<DataType, item_type, ConnectivityPtr>& item_value)
   using data_type       = std::remove_const_t<typename ItemValueType::data_type>;
   using index_type      = typename ItemValueType::index_type;
 
-  static_assert(not std::is_same_v<data_type, bool>, "min cannot be called on boolean arrays");
+  static_assert(std::is_arithmetic_v<data_type>, "min cannot be called on non-arithmetic data");
+  static_assert(not std::is_same_v<data_type, bool>, "min cannot be called on boolean data");
 
   class ItemValueMin
   {
@@ -113,7 +114,9 @@ max(const ItemValue<DataType, item_type, ConnectivityPtr>& item_value)
   using data_type       = std::remove_const_t<typename ItemValueType::data_type>;
   using index_type      = typename ItemValueType::index_type;
 
-  static_assert(not std::is_same_v<data_type, bool>, "min cannot be called on boolean arrays");
+  static_assert(std::is_arithmetic_v<data_type>, "max cannot be called on non arithmetic data");
+  static_assert(not std::is_same_v<data_type, bool>, "max cannot be called on boolean data");
+
   class ItemValueMax
   {
    private:
@@ -205,7 +208,7 @@ sum(const ItemValue<DataType, item_type, ConnectivityPtr>& item_value)
   using data_type       = std::remove_const_t<typename ItemValueType::data_type>;
   using index_type      = typename ItemValueType::index_type;
 
-  static_assert(not std::is_same_v<data_type, bool>, "sum cannot be called on boolean arrays");
+  static_assert(not std::is_same_v<data_type, bool>, "sum cannot be called on boolean data");
 
   class ItemValueSum
   {
diff --git a/src/utils/Array.hpp b/src/utils/Array.hpp
index f78f543080edcfa614e6ad549a73349ffb66da74..ca8a6ea6b349b2918c54ccd8de354bff8e999a6f 100644
--- a/src/utils/Array.hpp
+++ b/src/utils/Array.hpp
@@ -189,6 +189,9 @@ min(const Array<DataType>& array)
   using data_type  = std::remove_const_t<typename ArrayType::data_type>;
   using index_type = typename ArrayType::index_type;
 
+  static_assert(std::is_arithmetic_v<data_type>, "min cannot be called on non-arithmetic data");
+  static_assert(not std::is_same_v<data_type, bool>, "min cannot be called on boolean data");
+
   class ArrayMin
   {
    private:
@@ -249,6 +252,9 @@ max(const Array<DataType>& array)
   using data_type  = std::remove_const_t<typename ArrayType::data_type>;
   using index_type = typename ArrayType::index_type;
 
+  static_assert(std::is_arithmetic_v<data_type>, "max cannot be called on non-arithmetic data");
+  static_assert(not std::is_same_v<data_type, bool>, "max cannot be called on boolean data");
+
   class ArrayMax
   {
    private:
@@ -309,6 +315,8 @@ sum(const Array<DataType>& array)
   using data_type  = std::remove_const_t<DataType>;
   using index_type = typename ArrayType::index_type;
 
+  static_assert(not std::is_same_v<data_type, bool>, "sum cannot be called on boolean data");
+
   class ArraySum
   {
    private: