On 18/12/18 15:52 +0000, Jonathan Wakely wrote:
Now that path::operator/=(basic_string_view<value_type>) works directly
from the string argument, instead of constructing a temporary path from
the string, it's potentially more efficient to do 'path(x) /= s' instead
of 'x / s'. This changes the only relevant place in the library.
* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Append
string to lvalue to avoid creating temporary path.
This is only an optimization if it doesn't introduce a new copy! Fixed
by the attached patch.
Tested x86_64-linux, committed to trunk.
commit c2cccc34e8d8c9db216b96bffaba018f50ec7b75
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Tue Dec 18 16:34:47 2018 +0000
Fix previous commit to move instead of copying
* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Move new
path instead of copying.
diff --git a/libstdc++-v3/src/filesystem/std-dir.cc b/libstdc++-v3/src/filesystem/std-dir.cc
index 216182a2e56..b0f869fc8fd 100644
--- a/libstdc++-v3/src/filesystem/std-dir.cc
+++ b/libstdc++-v3/src/filesystem/std-dir.cc
@@ -63,7 +63,7 @@ struct fs::_Dir : _Dir_base
{
auto name = path;
name /= entp->d_name;
- entry = fs::directory_entry{name, get_file_type(*entp)};
+ entry = fs::directory_entry{std::move(name), get_file_type(*entp)};
return true;
}
else if (!ec)