-    size_t Start(size_t n) const    { return m_matches[n].rm_so; }
-    size_t End(size_t n) const      { return m_matches[n].rm_eo; }
+    // we just use casts here because the fields of regmatch_t struct may be 64
+    // bit but we're limited to size_t in our public API and are not going to
+    // change it because operating on strings longer than 4GB using it is
+    // absolutely impractical anyhow
+    size_t Start(size_t n) const
+    {
+        return wx_truncate_cast(size_t, m_matches[n].rm_so);
+    }
+
+    size_t End(size_t n) const
+    {
+        return wx_truncate_cast(size_t, m_matches[n].rm_eo);
+    }