LWG2707 init filesystem::path from string_type&&
authorJonathan Wakely <jwakely@redhat.com>
Fri, 21 Oct 2016 17:00:53 +0000 (18:00 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 21 Oct 2016 17:00:53 +0000 (18:00 +0100)
* include/experimental/bits/fs_path.h (path::path(string_type&&))
(path::operator=(string&&), path::assign(string_type&&)): Define
construction and assignment from string_type rvalues (LWG 2707).

From-SVN: r241416

libstdc++-v3/ChangeLog
libstdc++-v3/include/experimental/bits/fs_path.h

index fef7aa956f837d867db66ef49a5ca511bd35fccd..7fb055ded2b0f860caad20a8d6939d98b785fc43 100644 (file)
@@ -1,3 +1,9 @@
+2016-10-21  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/experimental/bits/fs_path.h (path::path(string_type&&))
+       (path::operator=(string&&), path::assign(string_type&&)): Define
+       construction and assignment from string_type rvalues (LWG 2707).
+
 2016-10-21  Eelis van der Weegen  <eelis@eelis.net>
 
        * include/bits/stl_algo.h (__gen_two_uniform_ints): Move logic out
index dab8ef0165ed920603090a60f08f8fe28f5a1c9d..4d7291f9f073a98b3ffcf6f5a6102adc7225317d 100644 (file)
@@ -159,6 +159,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
       __p.clear();
     }
 
+    path(string_type&& __source)
+    : _M_pathname(std::move(__source))
+    { _M_split_cmpts(); }
+
     template<typename _Source,
             typename _Require = _Path<_Source>>
       path(_Source const& __source)
@@ -193,6 +197,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
 
     path& operator=(const path& __p) = default;
     path& operator=(path&& __p) noexcept;
+    path& operator=(string_type&& __source);
+    path& assign(string_type&& __source);
 
     template<typename _Source>
       _Path<_Source>&
@@ -721,6 +727,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
     return *this;
   }
 
+  inline path&
+  path::operator=(string_type&& __source)
+  { return *this = path(std::move(__source)); }
+
+  inline path&
+  path::assign(string_type&& __source)
+  { return *this = path(std::move(__source)); }
+
   inline path&
   path::operator+=(const path& __p)
   {