I couldn't find a description of the iterator stability of recursive_directory_iterator but it gives problems when you remove the directory which is being iterated even when that directory is empty. For example if you want to remove all empty directories, the following code will throw an exception in ++it after the 'remove' call: fs::path pthDirectory = ...; fs::recursive_directory_iterator itEnd; for (fs::recursive_directory_iterator it(pthDirectory); it != itEnd; ++it) { boost::system::error_code ec; const fs::path& rPath = it->path(); if (fs::is_directory(rPath, ec)) { if (fs::is_empty(rPath, ec)) { fs::remove(rPath, ec); } } } It seems solvable with the way one erases a map (i.e. using while (it != itEnd) and using the equivalent of map.erase(it++)). Maybe add a note to the documentation or did I overlook something?