diff --git a/dune/matrix-vector/traits/CMakeLists.txt b/dune/matrix-vector/traits/CMakeLists.txt
index fceabef21c8f600ea8b1cfcfa254d4fc2aa599d3..3914b32fe7e1f5434b82d81e1ddd22f9f1562641 100644
--- a/dune/matrix-vector/traits/CMakeLists.txt
+++ b/dune/matrix-vector/traits/CMakeLists.txt
@@ -1,6 +1,7 @@
 #install headers
 install(FILES
   fieldtraits.hh
+  isquadratic.hh
   matrixtraits.hh
   scalartraits.hh
   utilities.hh
diff --git a/dune/matrix-vector/traits/isquadratic.hh b/dune/matrix-vector/traits/isquadratic.hh
new file mode 100644
index 0000000000000000000000000000000000000000..77d9a80340ddd83625c7bb6215f7d478b1c8e741
--- /dev/null
+++ b/dune/matrix-vector/traits/isquadratic.hh
@@ -0,0 +1,41 @@
+#ifndef DUNE_MATRIX_VECTOR_TRAITS_ISQUADRATIC_HH
+#define DUNE_MATRIX_VECTOR_TRAITS_ISQUADRATIC_HH
+
+#include <dune/matrix-vector/traits/utilities.hh>
+
+/**
+ * \file
+ * \brief This may yield incorrect results for types whose ScalarTraits or
+ * MatrixTraits specializations are incomplete. Will report the dimension > 0
+ * in case the type is detected to be symmetric.
+ */
+
+namespace Dune {
+namespace MatrixVector {
+namespace Traits {
+
+template <class, class Enable = void>
+struct IsQuadratic {
+  constexpr static int dimension = 0;
+};
+
+template <class T>
+struct IsQuadratic<T, EnableScalar<T>> {
+  constexpr static int dimension = 1;
+};
+
+template <class T>
+using EnableNonScalarQuadraticMatrix =
+    std::enable_if_t<isMatrix<T>() and (MatrixTraits<T>::rows > 1) and
+                     MatrixTraits<T>::rows == MatrixTraits<T>::cols>;
+
+template <class T>
+struct IsQuadratic<T, EnableNonScalarQuadraticMatrix<T>> {
+  constexpr static int dimension = MatrixTraits<T>::rows;
+};
+
+} // end namespace Traits
+} // end namespace MatrixVector
+} // end namespace Dune
+
+#endif // DUNE_MATRIX_VECTOR_TRAITS_ISQUADRATIC_HH
diff --git a/dune/matrix-vector/traits/utilities.hh b/dune/matrix-vector/traits/utilities.hh
index ecc17b580b11f45ae2cf34562a092288fa0a44ef..1ae672ecb54a41cf2cf5bc8a4e6951bde2734073 100644
--- a/dune/matrix-vector/traits/utilities.hh
+++ b/dune/matrix-vector/traits/utilities.hh
@@ -11,6 +11,9 @@
 #include <dune/matrix-vector/traits/matrixtraits.hh>
 #include <dune/matrix-vector/traits/vectortraits.hh>
 
+// coming below to avoid circular dependency:
+// #include <dune/matrix-vector/traits/isquadratic.hh>
+
 namespace Dune {
 namespace MatrixVector {
 
@@ -82,4 +85,18 @@ constexpr auto isSparseRangeIterable() {
 } // end namespace MatrixVector
 } // end namespace Dune
 
+#include <dune/matrix-vector/traits/isquadratic.hh>
+
+namespace Dune {
+namespace MatrixVector {
+
+template <class T>
+constexpr auto isQuadratic() {
+  return Std::bool_constant<Traits::IsQuadratic<std::decay_t<T>>::dimension>();
+}
+
+} // end namespace MatrixVector
+} // end namespace Dune
+
+
 #endif // DUNE_MATRIX_VECTOR_TRAITS_UTILITIES_HH