From 337a7c542d57d936159681178d476dc0e82027f8 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Wed, 18 Jan 2017 05:48:55 +0000 Subject: Fix filesystem::path assignment from {} Adding `path::operator=(string_type&&)` made the expression `p = {}` ambiguous. This path fixes that ambiguity by making the `string&&` overload a template so it ranks lower during overload resolution. llvm-svn: 292345 --- .../class.path/path.member/path.assign/source.pass.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp') diff --git a/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp b/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp index 9e48cbf1e7f..987c873218c 100644 --- a/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/class.path/path.member/path.assign/source.pass.cpp @@ -15,6 +15,7 @@ // template // path& operator=(Source const&); +// path& operator=(string_type&&); // template // path& assign(Source const&); // template @@ -213,12 +214,29 @@ void test_sfinae() { } } +void RunStringMoveTest(const char* Expect) { + using namespace fs; + std::string ss(Expect); + path p; + { + DisableAllocationGuard g; ((void)g); + path& pr = (p = std::move(ss)); + assert(&pr == &p); + } + assert(p == Expect); + { + // Signature test + ASSERT_NOEXCEPT(p = std::move(ss)); + } +} + int main() { for (auto const& MS : PathList) { RunTestCase(MS); RunTestCase(MS); RunTestCase(MS); RunTestCase(MS); + RunStringMoveTest(MS); } test_sfinae(); } -- cgit v1.2.3