improve count variables
diff --git a/include/inja/template.hpp b/include/inja/template.hpp
index bc63be2..8c6912a 100644
--- a/include/inja/template.hpp
+++ b/include/inja/template.hpp
@@ -20,13 +20,9 @@
 
   /// Return number of variables (total number, not distinct ones) in the template
   int count_variables() {
-    int result {0};
-    for (auto& n : nodes) {
-      if (n.flags == Node::Flag::ValueLookupDot || n.flags == Node::Flag::ValueLookupPointer) {
-        result += 1;
-      }
-    } 
-    return result;
+    return std::count_if(nodes.cbegin(), nodes.cend(), [](const inja::Node &node) {
+      return (node.flags == Node::Flag::ValueLookupDot || node.flags == Node::Flag::ValueLookupPointer);
+    });
   }
 };
 
diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp
index 40551d8..20bff7e 100644
--- a/single_include/inja/inja.hpp
+++ b/single_include/inja/inja.hpp
@@ -2283,13 +2283,9 @@
 
   /// Return number of variables (total number, not distinct ones) in the template
   int count_variables() {
-    int result {0};
-    for (auto& n : nodes) {
-      if (n.flags == Node::Flag::ValueLookupDot || n.flags == Node::Flag::ValueLookupPointer) {
-        result += 1;
-      }
-    } 
-    return result;
+    return std::count_if(nodes.cbegin(), nodes.cend(), [](const inja::Node &node) {
+      return (node.flags == Node::Flag::ValueLookupDot || node.flags == Node::Flag::ValueLookupPointer);
+    });
   }
 };