diff --git a/include/inja/renderer.hpp b/include/inja/renderer.hpp
index fcb2bcd..d62bdb6 100644
--- a/include/inja/renderer.hpp
+++ b/include/inja/renderer.hpp
@@ -500,16 +500,17 @@
       (*current_loop_data)["parent"] = std::move(tmp);
     }
 
+    size_t index = 0;
     for (auto it = result->begin(); it != result->end(); ++it) {
       json_loop_data[static_cast<std::string>(node.value)] = *it;
 
-      size_t index = std::distance(result->begin(), it);
       (*current_loop_data)["index"] = index;
       (*current_loop_data)["index1"] = index + 1;
       (*current_loop_data)["is_first"] = (index == 0);
       (*current_loop_data)["is_last"] = (index == result->size() - 1);
 
       node.body.accept(*this);
+      ++index;
     }
 
     json_loop_data[static_cast<std::string>(node.value)].clear();
@@ -531,17 +532,18 @@
       (*current_loop_data)["parent"] = std::move(*current_loop_data);
     }
 
+    size_t index = 0;
     for (auto it = result->begin(); it != result->end(); ++it) {
       json_loop_data[static_cast<std::string>(node.key)] = it.key();
       json_loop_data[static_cast<std::string>(node.value)] = it.value();
 
-      size_t index = std::distance(result->begin(), it);
       (*current_loop_data)["index"] = index;
       (*current_loop_data)["index1"] = index + 1;
       (*current_loop_data)["is_first"] = (index == 0);
       (*current_loop_data)["is_last"] = (index == result->size() - 1);
 
       node.body.accept(*this);
+      ++index;
     }
 
     json_loop_data[static_cast<std::string>(node.key)].clear();
diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp
index b9ccd7c..281ae54 100644
--- a/single_include/inja/inja.hpp
+++ b/single_include/inja/inja.hpp
@@ -3759,16 +3759,17 @@
       (*current_loop_data)["parent"] = std::move(tmp);
     }
 
+    size_t index = 0;
     for (auto it = result->begin(); it != result->end(); ++it) {
       json_loop_data[static_cast<std::string>(node.value)] = *it;
 
-      size_t index = std::distance(result->begin(), it);
       (*current_loop_data)["index"] = index;
       (*current_loop_data)["index1"] = index + 1;
       (*current_loop_data)["is_first"] = (index == 0);
       (*current_loop_data)["is_last"] = (index == result->size() - 1);
 
       node.body.accept(*this);
+      ++index;
     }
 
     json_loop_data[static_cast<std::string>(node.value)].clear();
@@ -3790,17 +3791,18 @@
       (*current_loop_data)["parent"] = std::move(*current_loop_data);
     }
 
+    size_t index = 0;
     for (auto it = result->begin(); it != result->end(); ++it) {
       json_loop_data[static_cast<std::string>(node.key)] = it.key();
       json_loop_data[static_cast<std::string>(node.value)] = it.value();
 
-      size_t index = std::distance(result->begin(), it);
       (*current_loop_data)["index"] = index;
       (*current_loop_data)["index1"] = index + 1;
       (*current_loop_data)["is_first"] = (index == 0);
       (*current_loop_data)["is_last"] = (index == result->size() - 1);
 
       node.body.accept(*this);
+      ++index;
     }
 
     json_loop_data[static_cast<std::string>(node.key)].clear();
