From ac655ef7420e7f6a49f3a440e265c05776c3245c Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Wed, 7 Sep 2016 03:32:06 +0000 Subject: [PATCH] Fix PR#30303 - no matching function for call to '__ptr_in_range' git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@280779 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/string | 8 +++++++- .../string_append/iterator.pass.cpp | 9 +++++++++ .../string_assign/iterator.pass.cpp | 9 +++++++++ .../string_insert/iter_iter_iter.pass.cpp | 8 ++++++++ .../string_replace/iter_iter_iter_iter.pass.cpp | 14 ++++++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/include/string b/include/string index cfae0c84c..b9e044e82 100644 --- a/include/string +++ b/include/string @@ -2156,12 +2156,18 @@ basic_string<_CharT, _Traits, _Allocator>::append(_InputIterator __first, _Input return *this; } -template +template bool __ptr_in_range (const _Tp* __p, const _Tp* __first, const _Tp* __last) { return __first <= __p && __p < __last; } +template +bool __ptr_in_range (const _Tp1* __p, const _Tp2* __first, const _Tp2* __last) +{ + return false; +} + template template typename enable_if diff --git a/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp index 8c54a3832..e834c1b21 100644 --- a/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp @@ -195,4 +195,13 @@ int main() assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); } + { // test appending a different type + typedef std::string S; + const uint8_t p[] = "ABCD"; + + S s; + s.append(p, p + 4); + assert(s == "ABCD"); + } + } diff --git a/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp index 0d3dac743..20e242dd1 100644 --- a/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp @@ -196,4 +196,13 @@ int main() s_long.assign(s_long.begin() + 30, s_long.end()); assert(s_long == "nsectetur/"); } + + { // test assigning a different type + typedef std::string S; + const uint8_t p[] = "ABCD"; + + S s; + s.assign(p, p + 4); + assert(s == "ABCD"); + } } diff --git a/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp index 1b5baf4f4..9803d5a9c 100644 --- a/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp @@ -186,4 +186,12 @@ int main() assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); } + { // test assigning a different type + typedef std::string S; + const uint8_t p[] = "ABCD"; + + S s; + s.insert(s.begin(), p, p + 4); + assert(s == "ABCD"); + } } diff --git a/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp index abf15217f..1231af8a6 100644 --- a/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp +++ b/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp @@ -1023,4 +1023,18 @@ int main() s_long.replace(s_long.begin(), s_long.begin(), s_long.begin(), s_long.end()); assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/"); } + + { // test assigning a different type + typedef std::string S; + const uint8_t pc[] = "ABCD"; + uint8_t p[] = "EFGH"; + + S s; + s.replace(s.begin(), s.end(), pc, pc + 4); + assert(s == "ABCD"); + + s.clear(); + s.replace(s.begin(), s.end(), p, p + 4); + assert(s == "EFGH"); + } }