diff --git a/elog_meta.hpp b/elog_meta.hpp
index 6e44406..b44f52d 100644
--- a/elog_meta.hpp
+++ b/elog_meta.hpp
@@ -34,13 +34,13 @@
                   std::map<std::string, std::string>& metadata)
 {
     constexpr auto separator = '=';
-    for (const auto& entry : data)
+    for (const auto& entryItem : data)
     {
-        auto pos = entry.find(separator);
+        auto pos = entryItem.find(separator);
         if (std::string::npos != pos)
         {
-            auto key = entry.substr(0, entry.find(separator));
-            auto value = entry.substr(entry.find(separator) + 1);
+            auto key = entryItem.substr(0, entryItem.find(separator));
+            auto value = entryItem.substr(entryItem.find(separator) + 1);
             metadata.emplace(std::move(key), std::move(value));
         }
     }
diff --git a/log_manager.cpp b/log_manager.cpp
index 46ada75..ddb5a1d 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -223,12 +223,12 @@
 {
     // additionalData is a list of "metadata=value"
     constexpr auto separator = '=';
-    for (const auto& entry : additionalData)
+    for (const auto& entryItem : additionalData)
     {
-        auto found = entry.find(separator);
+        auto found = entryItem.find(separator);
         if (std::string::npos != found)
         {
-            auto metadata = entry.substr(0, found);
+            auto metadata = entryItem.substr(0, found);
             auto iter = meta.find(metadata);
             if (meta.end() != iter)
             {
@@ -240,8 +240,8 @@
 
 void Manager::erase(uint32_t entryId)
 {
-    auto entry = entries.find(entryId);
-    if (entries.end() != entry)
+    auto entryFound = entries.find(entryId);
+    if (entries.end() != entryFound)
     {
         // Delete the persistent representation of this error.
         fs::path errorPath(ERRLOG_PERSIST_PATH);
@@ -255,7 +255,7 @@
                 ids.erase(it);
             }
         };
-        if (entry->second->severity() >= Entry::sevLowerLimit)
+        if (entryFound->second->severity() >= Entry::sevLowerLimit)
         {
             removeId(infoErrors, entryId);
         }
@@ -263,7 +263,7 @@
         {
             removeId(realErrors, entryId);
         }
-        entries.erase(entry);
+        entries.erase(entryFound);
     }
     else
     {
diff --git a/log_manager.hpp b/log_manager.hpp
index 864de1a..e6714af 100644
--- a/log_manager.hpp
+++ b/log_manager.hpp
@@ -101,9 +101,9 @@
         auto iter = entries.begin();
         while (iter != entries.end())
         {
-            auto entry = iter->first;
+            auto e = iter->first;
             ++iter;
-            erase(entry);
+            erase(e);
         }
     }
 
