diff --git a/cros-disks.gyp b/cros-disks.gyp
index 19a1d1f..6465c8b 100644
--- a/cros-disks.gyp
+++ b/cros-disks.gyp
@@ -19,6 +19,9 @@
         'libudev',
       ],
     },
+    'cflags_cc': [
+      '-std=gnu++11',
+    ],
   },
   'targets': [
     {
diff --git a/cros_disks_server.cc b/cros_disks_server.cc
index 690e683..0795333 100644
--- a/cros_disks_server.cc
+++ b/cros_disks_server.cc
@@ -88,9 +88,7 @@
   string mount_path;
 
   if (platform_->GetRealPath(path, &source_path)) {
-    for (vector<MountManager*>::iterator manager_iter = mount_managers_.begin();
-         manager_iter != mount_managers_.end(); ++manager_iter) {
-      MountManager* manager = *manager_iter;
+    for (const auto& manager : mount_managers_) {
       if (manager->CanMount(source_path)) {
         source_type = manager->GetMountSourceType();
         error_type =
@@ -110,9 +108,7 @@
                               const vector<string>& options,
                               DBus::Error& error) {  // NOLINT
   MountErrorType error_type = MOUNT_ERROR_INVALID_PATH;
-  for (vector<MountManager*>::iterator manager_iter = mount_managers_.begin();
-       manager_iter != mount_managers_.end(); ++manager_iter) {
-    MountManager* manager = *manager_iter;
+  for (const auto& manager : mount_managers_) {
     if (manager->CanUnmount(path)) {
       error_type = manager->Unmount(path, options);
       break;
@@ -130,9 +126,7 @@
 }
 
 void CrosDisksServer::DoUnmountAll() {
-  for (vector<MountManager*>::iterator manager_iter = mount_managers_.begin();
-       manager_iter != mount_managers_.end(); ++manager_iter) {
-    MountManager* manager = *manager_iter;
+  for (const auto& manager : mount_managers_) {
     manager->UnmountAll();
   }
 }
@@ -142,10 +136,9 @@
   vector<Disk> disks = disk_manager_->EnumerateDisks();
   vector<string> devices;
   devices.reserve(disks.size());
-  for (vector<Disk>::const_iterator disk_iterator = disks.begin();
-       disk_iterator != disks.end(); ++disk_iterator) {
-    if (!auto_mountable_only || disk_iterator->is_auto_mountable()) {
-      devices.push_back(disk_iterator->native_path());
+  for (const auto& disk : disks) {
+    if (!auto_mountable_only || disk.is_auto_mountable()) {
+      devices.push_back(disk.native_path());
     }
   }
   return devices;
@@ -194,17 +187,13 @@
 }
 
 void CrosDisksServer::OnSessionStarted() {
-  for (vector<MountManager*>::iterator manager_iter = mount_managers_.begin();
-       manager_iter != mount_managers_.end(); ++manager_iter) {
-    MountManager* manager = *manager_iter;
+  for (const auto& manager : mount_managers_) {
     manager->StartSession();
   }
 }
 
 void CrosDisksServer::OnSessionStopped() {
-  for (vector<MountManager*>::iterator manager_iter = mount_managers_.begin();
-       manager_iter != mount_managers_.end(); ++manager_iter) {
-    MountManager* manager = *manager_iter;
+  for (const auto& manager : mount_managers_) {
     manager->StopSession();
   }
 }
diff --git a/device_event_moderator.cc b/device_event_moderator.cc
index 9139a21..4f585ff 100644
--- a/device_event_moderator.cc
+++ b/device_event_moderator.cc
@@ -62,14 +62,12 @@
   DeviceEventList events;
   if (event_source_->GetDeviceEvents(&events)) {
     if (is_event_queued_) {
-      for (DeviceEventList::const_iterator event_iter = events.begin();
-           event_iter != events.end(); ++event_iter) {
-        event_queue_.Add(*event_iter);
+      for (const auto& event : events) {
+        event_queue_.Add(event);
       }
     } else {
-      for (DeviceEventList::const_iterator event_iter = events.begin();
-           event_iter != events.end(); ++event_iter) {
-        event_dispatcher_->DispatchDeviceEvent(*event_iter);
+      for (const auto& event : events) {
+        event_dispatcher_->DispatchDeviceEvent(event);
       }
     }
   }
diff --git a/device_event_moderator_unittest.cc b/device_event_moderator_unittest.cc
index dae8b06..8816524 100644
--- a/device_event_moderator_unittest.cc
+++ b/device_event_moderator_unittest.cc
@@ -34,11 +34,10 @@
   DeviceEventModeratorTest()
       : moderator_(&event_dispatcher_, &event_source_),
         event1_(DeviceEvent::kDeviceAdded, "1"),
-        event2_(DeviceEvent::kDeviceAdded, "2") {
-    event_list1_.push_back(event1_);
-    event_list2_.push_back(event2_);
-    event_list3_.push_back(event1_);
-    event_list3_.push_back(event2_);
+        event2_(DeviceEvent::kDeviceAdded, "2"),
+        event_list1_({event1_}),
+        event_list2_({event2_}),
+        event_list3_({event1_, event2_}) {
   }
 
  protected:
diff --git a/disk_manager.cc b/disk_manager.cc
index d01983f..5b03f33 100644
--- a/disk_manager.cc
+++ b/disk_manager.cc
@@ -76,12 +76,9 @@
   // Initialize |disks_detected_| with auto-mountable devices that already
   // exist when disk manager starts since there is no udev add event that adds
   // these devices to |disks_detected_|.
-  vector<Disk> disks = EnumerateDisks();
-  for (vector<Disk>::const_iterator disk_iterator = disks.begin();
-       disk_iterator != disks.end(); ++disk_iterator) {
-    if (disk_iterator->is_auto_mountable()) {
-      disks_detected_.insert(
-          std::make_pair(disk_iterator->native_path(), set<string>()));
+  for (const auto& disk : EnumerateDisks()) {
+    if (disk.is_auto_mountable()) {
+      disks_detected_.insert(std::make_pair(disk.native_path(), set<string>()));
     }
   }
 
@@ -189,9 +186,8 @@
   } else if (child_disk_removed) {
     if (ContainsKey(disks_detected_, device_path)) {
       set<string>& child_disks = disks_detected_[device_path];
-      for (set<string>::const_iterator child_iter = child_disks.begin();
-           child_iter != child_disks.end(); ++child_iter) {
-        events->push_back(DeviceEvent(DeviceEvent::kDiskRemoved, *child_iter));
+      for (const auto& child_disk : child_disks) {
+        events->push_back(DeviceEvent(DeviceEvent::kDiskRemoved, child_disk));
       }
     }
   }
diff --git a/disk_manager_unittest.cc b/disk_manager_unittest.cc
index 2524243..b9ae811 100644
--- a/disk_manager_unittest.cc
+++ b/disk_manager_unittest.cc
@@ -66,12 +66,7 @@
   filesystem.set_mounter_type(ExFATMounter::kMounterType);
 
   string target_path = "/media/disk";
-
-  vector<string> options;
-  options.push_back("rw");
-  options.push_back("nodev");
-  options.push_back("noexec");
-  options.push_back("nosuid");
+  vector<string> options = {"rw", "nodev", "noexec", "nosuid"};
 
   scoped_ptr<Mounter> mounter(manager_.CreateMounter(disk, filesystem,
                                                      target_path, options));
@@ -91,12 +86,7 @@
   filesystem.set_mounter_type(ExternalMounter::kMounterType);
 
   string target_path = "/media/disk";
-
-  vector<string> options;
-  options.push_back("rw");
-  options.push_back("nodev");
-  options.push_back("noexec");
-  options.push_back("nosuid");
+  vector<string> options = {"rw", "nodev", "noexec", "nosuid"};
 
   scoped_ptr<Mounter> mounter(manager_.CreateMounter(disk, filesystem,
                                                      target_path, options));
@@ -115,12 +105,7 @@
   filesystem.set_mounter_type(NTFSMounter::kMounterType);
 
   string target_path = "/media/disk";
-
-  vector<string> options;
-  options.push_back("rw");
-  options.push_back("nodev");
-  options.push_back("noexec");
-  options.push_back("nosuid");
+  vector<string> options = {"rw", "nodev", "noexec", "nosuid"};
 
   scoped_ptr<Mounter> mounter(manager_.CreateMounter(disk, filesystem,
                                                      target_path, options));
@@ -140,12 +125,7 @@
   filesystem.AddExtraMountOption("shortname=mixed");
 
   string target_path = "/media/disk";
-
-  vector<string> options;
-  options.push_back("rw");
-  options.push_back("nodev");
-  options.push_back("noexec");
-  options.push_back("nosuid");
+  vector<string> options = {"rw", "nodev", "noexec", "nosuid"};
 
   scoped_ptr<Mounter> mounter(manager_.CreateMounter(disk, filesystem,
                                                      target_path, options));
@@ -295,8 +275,7 @@
 
 TEST_F(DiskManagerTest, DoUnmountDiskWithInvalidUnmountOptions) {
   string source_path = "/dev/nonexistent-path";
-  vector<string> options;
-  options.push_back("invalid-unmount-option");
+  vector<string> options = {"invalid-unmount-option"};
   EXPECT_EQ(MOUNT_ERROR_INVALID_UNMOUNT_OPTIONS,
             manager_.DoUnmount(source_path, options));
 }
diff --git a/mount_info.cc b/mount_info.cc
index 0cd9812..8792d5c 100644
--- a/mount_info.cc
+++ b/mount_info.cc
@@ -65,18 +65,16 @@
 
 vector<string> MountInfo::GetMountPaths(const string& source_path) const {
   vector<string> mount_paths;
-  for (vector<MountPoint>::const_iterator iter = mount_points_.begin();
-       iter != mount_points_.end(); ++iter) {
-    if (iter->source_path == source_path)
-      mount_paths.push_back(iter->mount_path);
+  for (const auto& mount_point : mount_points_) {
+    if (mount_point.source_path == source_path)
+      mount_paths.push_back(mount_point.mount_path);
   }
   return mount_paths;
 }
 
 bool MountInfo::HasMountPath(const string& mount_path) const {
-  for (vector<MountPoint>::const_iterator iter = mount_points_.begin();
-       iter != mount_points_.end(); ++iter) {
-    if (iter->mount_path == mount_path)
+  for (const auto& mount_point : mount_points_) {
+    if (mount_point.mount_path == mount_path)
       return true;
   }
   return false;
diff --git a/mount_info_unittest.cc b/mount_info_unittest.cc
index ad3708d..f73977b 100644
--- a/mount_info_unittest.cc
+++ b/mount_info_unittest.cc
@@ -70,13 +70,10 @@
 TEST_F(MountInfoTest, GetMountPaths) {
   EXPECT_TRUE(manager_.RetrieveFromFile(mount_file_));
 
-  vector<string> expected_paths;
-  expected_paths.push_back("/var");
-  expected_paths.push_back("/home");
+  vector<string> expected_paths = {"/var", "/home"};
   EXPECT_TRUE(expected_paths == manager_.GetMountPaths("/dev/sda1"));
 
-  expected_paths.clear();
-  expected_paths.push_back("/media/Test 1");
+  expected_paths = {"/media/Test 1"};
   EXPECT_TRUE(expected_paths == manager_.GetMountPaths("/dev/sdb1"));
 
   expected_paths.clear();
diff --git a/mount_manager.cc b/mount_manager.cc
index ee79ef1..12072e3 100644
--- a/mount_manager.cc
+++ b/mount_manager.cc
@@ -224,9 +224,8 @@
   // Make a copy of the mount path cache before iterating through it
   // as Unmount modifies the cache.
   MountPathMap mount_paths_copy = mount_paths_;
-  for (MountPathMap::const_iterator path_iterator = mount_paths_copy.begin();
-       path_iterator != mount_paths_copy.end(); ++path_iterator) {
-    if (Unmount(path_iterator->first, options) != MOUNT_ERROR_NONE) {
+  for (const auto& path_pair : mount_paths_copy) {
+    if (Unmount(path_pair.first, options) != MOUNT_ERROR_NONE) {
       all_umounted = false;
     }
   }
@@ -242,10 +241,9 @@
                                           string* source_path) const {
   CHECK(source_path) << "Invalid source path argument";
 
-  for (MountPathMap::const_iterator path_iterator = mount_paths_.begin();
-       path_iterator != mount_paths_.end(); ++path_iterator) {
-    if (path_iterator->second == mount_path) {
-      *source_path = path_iterator->first;
+  for (const auto& path_pair : mount_paths_) {
+    if (path_pair.second == mount_path) {
+      *source_path = path_pair.first;
       return true;
     }
   }
@@ -265,9 +263,8 @@
 }
 
 bool MountManager::IsMountPathInCache(const string& mount_path) const {
-  for (MountPathMap::const_iterator path_iterator = mount_paths_.begin();
-       path_iterator != mount_paths_.end(); ++path_iterator) {
-    if (path_iterator->second == mount_path)
+  for (const auto& path_pair : mount_paths_) {
+    if (path_pair.second == mount_path)
       return true;
   }
   return false;
@@ -300,11 +297,8 @@
 
 set<string> MountManager::GetReservedMountPaths() const {
   set<string> reserved_paths;
-  for (ReservedMountPathMap::const_iterator
-       path_iterator = reserved_mount_paths_.begin();
-       path_iterator != reserved_mount_paths_.end();
-       ++path_iterator) {
-    reserved_paths.insert(path_iterator->first);
+  for (const auto& path_pair : reserved_mount_paths_) {
+    reserved_paths.insert(path_pair.first);
   }
   return reserved_paths;
 }
@@ -346,9 +340,7 @@
   CHECK(unmount_flags) << "Invalid unmount flags argument";
 
   *unmount_flags = 0;
-  for (vector<string>::const_iterator option_iterator = options.begin();
-       option_iterator != options.end(); ++option_iterator) {
-    const string& option = *option_iterator;
+  for (const auto& option : options) {
     if (option == kUnmountOptionForce) {
       *unmount_flags |= MNT_FORCE;
     } else if (option == kUnmountOptionLazy) {
diff --git a/mount_manager_unittest.cc b/mount_manager_unittest.cc
index a62c627..84d9334 100644
--- a/mount_manager_unittest.cc
+++ b/mount_manager_unittest.cc
@@ -1018,11 +1018,8 @@
 // Verifies that MountManager::ExtractMountLabelFromOptions() extracts a mount
 // label from the given options and returns true.
 TEST_F(MountManagerTest, ExtractMountLabelFromOptions) {
-  vector<string> options;
+  vector<string> options = {"ro", "mountlabel=My USB Drive", "noexec"};
   string mount_label;
-  options.push_back("ro");
-  options.push_back("mountlabel=My USB Drive");
-  options.push_back("noexec");
 
   EXPECT_TRUE(manager_.ExtractMountLabelFromOptions(&options, &mount_label));
   EXPECT_THAT(options, ElementsAre("ro", "noexec"));
@@ -1053,12 +1050,9 @@
 // Verifies that MountManager::ExtractMountLabelFromOptions() extracts the last
 // mount label from the given options with two mount labels.
 TEST_F(MountManagerTest, ExtractMountLabelFromOptionsWithTwoMountLabels) {
-  vector<string> options;
+  vector<string> options = {"ro", "mountlabel=My USB Drive", "noexec",
+                            "mountlabel=Another Label"};
   string mount_label;
-  options.push_back("ro");
-  options.push_back("mountlabel=My USB Drive");
-  options.push_back("noexec");
-  options.push_back("mountlabel=Another Label");
 
   EXPECT_TRUE(manager_.ExtractMountLabelFromOptions(&options, &mount_label));
   EXPECT_THAT(options, ElementsAre("ro", "noexec"));
diff --git a/mount_options.cc b/mount_options.cc
index cb7c1a5..de49367 100644
--- a/mount_options.cc
+++ b/mount_options.cc
@@ -37,10 +37,7 @@
   bool option_read_only = false, option_read_write = false;
   string option_user_id, option_group_id;
 
-  for (vector<string>::const_iterator option_iterator = options.begin();
-       option_iterator != options.end(); ++option_iterator) {
-    const string& option = *option_iterator;
-
+  for (const auto& option : options) {
     // Skip early if |option| contains a comma.
     if (option.find(",") != string::npos) {
       LOG(WARNING) << "Ignoring invalid mount option '" << option << "'.";
@@ -124,10 +121,7 @@
   vector<string> data;
   data.reserve(options_.size());
 
-  for (vector<string>::const_iterator
-       option_iterator = options_.begin(); option_iterator != options_.end();
-       ++option_iterator) {
-    const string& option = *option_iterator;
+  for (const auto& option : options_) {
     if (option == kOptionReadOnly) {
       flags |= MS_RDONLY;
     } else if (option == kOptionReadWrite) {
diff --git a/mount_options_unittest.cc b/mount_options_unittest.cc
index ddb3212..add85dc 100644
--- a/mount_options_unittest.cc
+++ b/mount_options_unittest.cc
@@ -31,26 +31,23 @@
 
 TEST_F(MountOptionsTest, IsReadOnlyOptionSet) {
   MountOptions mount_options;
-  vector<string> options;
 
   // default construction
   EXPECT_TRUE(mount_options.IsReadOnlyOptionSet());
 
   // options: ro
-  options.push_back("ro");
+  vector<string> options = {"ro"};
   mount_options.Initialize(options, false, "", "");
   EXPECT_TRUE(mount_options.IsReadOnlyOptionSet());
 
   // options: rw
-  options.clear();
-  options.push_back("rw");
+  options = {"rw"};
   mount_options.Initialize(options, false, "", "");
   EXPECT_FALSE(mount_options.IsReadOnlyOptionSet());
 }
 
 TEST_F(MountOptionsTest, SetReadOnlyOption) {
   MountOptions mount_options;
-  vector<string> options;
   string expected_string_default = "ro";
   string expected_string_initialize = "ro,nodev,noexec,nosuid";
 
@@ -59,14 +56,13 @@
   EXPECT_EQ(expected_string_default, mount_options.ToString());
 
   // options: ro
-  options.push_back("ro");
+  vector<string> options = {"ro"};
   mount_options.Initialize(options, false, "", "");
   mount_options.SetReadOnlyOption();
   EXPECT_EQ(expected_string_initialize, mount_options.ToString());
 
   // options: rw
-  options.clear();
-  options.push_back("rw");
+  options = {"rw"};
   mount_options.Initialize(options, false, "", "");
   mount_options.SetReadOnlyOption();
   EXPECT_EQ(expected_string_initialize, mount_options.ToString());
