diff --git a/src/tg/detail/special_values.hh b/src/tg/detail/special_values.hh
index a36533fc9a201bbe325cdab1a8cd07b2c1f2c9bd..c8f78546d1993516163b9c6ff52c0fb9173923a3 100644
--- a/src/tg/detail/special_values.hh
+++ b/src/tg/detail/special_values.hh
@@ -123,7 +123,13 @@ struct special_values<size<D, ScalarT>>
 template <int C, int R, class ScalarT>
 struct special_values<mat<C, R, ScalarT>>
 {
-    static constexpr mat<C, R, ScalarT> ones() { return mat<C, R, ScalarT>() + ScalarT(1); }
+    static constexpr mat<C, R, ScalarT> ones()
+    {
+        mat<C, R, ScalarT> m;
+        for (auto c = 0; c < C; ++c)
+            m[c] = vec<R, ScalarT>(ScalarT(1));
+        return m;
+    }
     static constexpr mat<C, R, ScalarT> identity()
     {
         mat<C, R, ScalarT> m;