diff --git a/dynare++/tl/cc/tl_static.cc b/dynare++/tl/cc/tl_static.cc
index 54c997c5e4df6f41056d849f9fe1dec187441b76..03a7b312d4d42db2aab9bf9dfe10551117990e08 100644
--- a/dynare++/tl/cc/tl_static.cc
+++ b/dynare++/tl/cc/tl_static.cc
@@ -2,8 +2,11 @@
 
 #include "tl_static.hh"
 #include "pascal_triangle.hh"
+#include "tl_exception.hh"
 
 #include <mutex>
+#include <limits>
+#include <cmath>
 
 /* Note that we allow for repeated calls of |init|. This is not normal
    and the only purpose of allowing this is the test suite. */
@@ -29,6 +32,10 @@ namespace TLStatic
   void
   init(int dim, int nvar)
   {
+    // Check that tensor indices will not overflow (they are stored as signed int, hence on 31 bits)
+    if (std::log2(nvar)*dim > std::numeric_limits<int>::digits)
+      throw TLException(__FILE__, __LINE__, "Problem too large, you should decrease the approximation order");
+
     std::lock_guard<std::mutex>{mut};
     ebundle.generateUpTo(dim);
     pbundle.generateUpTo(dim);