diff --git a/Mesh/search.hpp b/Mesh/search.hpp
index 4499692c8489197b6c2dea746398380fa7bf5917..727dcc5495be1ad326dc88110f9162b5bf9e2d9a 100644
--- a/Mesh/search.hpp
+++ b/Mesh/search.hpp
@@ -46,7 +46,9 @@ void depth_first_search(State &init, Visitor &visit, Successor &fn) {
   std::vector<action> actions;
   fn(init, std::back_inserter(actions));
 
-  for (const action &action : actions) {
+  for (typename std::vector<action>::const_iterator it = actions.begin();
+       it != actions.end(); it++) {
+    const action &action = *it;
     delta change(action(init));
 
     change.apply(init);
@@ -69,7 +71,9 @@ void depth_limited_search(State &init, Visitor &visit, Successor &fn,
   std::vector<action> actions;
   fn(init, std::back_inserter(actions));
 
-  for (const action &action : actions) {
+  for (typename std::vector<action>::const_iterator it = actions.begin();
+       it != actions.end(); it++) {
+    const action &action = *it;
     delta change(action(init));
 
     change.apply(init);
@@ -96,7 +100,10 @@ void tree_search(State &init, Visitor &visit, Successor &fn, Queue q) {
     std::vector<action> actions;
     fn(s, std::back_inserter(actions));
 
-    for (const action &action : actions) {
+    for (typename std::vector<action>::const_iterator it = actions.begin();
+       it != actions.end(); it++) {
+      const action &action = *it;
+
       State to_add(s);
       action(s).apply(to_add);
 
@@ -290,8 +297,10 @@ void mcts_simulation(mcts_node<typename evaluator_traits<Evaluator>::score_type>
 
   score result(eval(state));
 
-  for (mcts_node<score> *node : ancestors)
-    node->update(result);
+  for (typename std::vector<mcts_node<score>*>::const_iterator it = ancestors.begin();
+       it != ancestors.end(); it++) {
+    (*it)->update(result);
+  }
 
   for (auto it = changes.rbegin(); it != changes.rend(); it++)
     (*it).reverse(state);