summaryrefslogtreecommitdiff
path: root/libcxx
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2016-09-07 03:32:06 +0000
committerMarshall Clow <mclow.lists@gmail.com>2016-09-07 03:32:06 +0000
commita43e998bdfed77e1ef8a8a81a2e561a38a4a9d7f (patch)
tree4a63d318334ba3d2f0468e74c94b039b910d6dd1 /libcxx
parentd09128e6655aca495a1bae45fc8d8049d5758daf (diff)
Fix PR#30303 - no matching function for call to '__ptr_in_range'
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/string8
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp9
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp9
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp8
-rw-r--r--libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp14
5 files changed, 47 insertions, 1 deletions
diff --git a/libcxx/include/string b/libcxx/include/string
index cfae0c84c7f..b9e044e82d4 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -2156,12 +2156,18 @@ basic_string<_CharT, _Traits, _Allocator>::append(_InputIterator __first, _Input
return *this;
}
-template <typename _Tp>
+template <class _Tp>
bool __ptr_in_range (const _Tp* __p, const _Tp* __first, const _Tp* __last)
{
return __first <= __p && __p < __last;
}
+template <class _Tp1, class _Tp2>
+bool __ptr_in_range (const _Tp1* __p, const _Tp2* __first, const _Tp2* __last)
+{
+ return false;
+}
+
template <class _CharT, class _Traits, class _Allocator>
template<class _ForwardIterator>
typename enable_if
diff --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
index 8c54a383269..e834c1b21d2 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
+++ b/libcxx/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/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
index 0d3dac74308..20e242dd162 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
+++ b/libcxx/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/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
index 1b5baf4f4c4..9803d5a9cdb 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
+++ b/libcxx/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/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
index abf15217f9d..1231af8a6a9 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
+++ b/libcxx/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");
+ }
}