[PATCH] PR libstdc++/85671 allow copy elision in path concatenation
Jonathan Wakely
jwakely@redhat.com
Mon May 7 17:26:00 GMT 2018
By performing the /= operation on a named local variable instead of a
temporary the copy made for the return value can be elided.
PR libstdc++/85671
* include/bits/fs_path.h (operator/): Permit copy elision.
* include/experimental/bits/fs_path.h (operator/): Likewise.
Tested powerpc64le-linux, committed to trunk.
-------------- next part --------------
commit e6b809f624733aae6e03fca3f720c9cb4037e111
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon May 7 13:59:17 2018 +0100
PR libstdc++/85671 allow copy elision in path concatenation
By performing the /= operation on a named local variable instead of a
temporary the copy made for the return value can be elided.
PR libstdc++/85671
* include/bits/fs_path.h (operator/): Permit copy elision.
* include/experimental/bits/fs_path.h (operator/): Likewise.
diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h
index 31c34d67c75..6703e9167e4 100644
--- a/libstdc++-v3/include/bits/fs_path.h
+++ b/libstdc++-v3/include/bits/fs_path.h
@@ -552,7 +552,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
/// Append one path to another
inline path operator/(const path& __lhs, const path& __rhs)
- { return path(__lhs) /= __rhs; }
+ {
+ path __result(__lhs);
+ __result /= __rhs;
+ return __result;
+ }
/// Write a path to a stream
template<typename _CharT, typename _Traits>
diff --git a/libstdc++-v3/include/experimental/bits/fs_path.h b/libstdc++-v3/include/experimental/bits/fs_path.h
index 456452bb317..3b4011e6414 100644
--- a/libstdc++-v3/include/experimental/bits/fs_path.h
+++ b/libstdc++-v3/include/experimental/bits/fs_path.h
@@ -510,7 +510,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
/// Append one path to another
inline path operator/(const path& __lhs, const path& __rhs)
- { return path(__lhs) /= __rhs; }
+ {
+ path __result(__lhs);
+ __result /= __rhs;
+ return __result;
+ }
/// Write a path to a stream
template<typename _CharT, typename _Traits>
More information about the Libstdc++
mailing list