libcxx initial import

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/strings/basic.string/string.nonmembers/string::op+/pointer_string.pass.cpp b/test/strings/basic.string/string.nonmembers/string::op+/pointer_string.pass.cpp
new file mode 100644
index 0000000..9556770
--- /dev/null
+++ b/test/strings/basic.string/string.nonmembers/string::op+/pointer_string.pass.cpp
@@ -0,0 +1,82 @@
+//===----------------------------------------------------------------------===//
+//
+// ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// template<class charT, class traits, class Allocator> 
+//   basic_string<charT,traits,Allocator> 
+//   operator+(const charT* lhs, const basic_string<charT,traits,Allocator>& rhs);
+
+// template<class charT, class traits, class Allocator> 
+//   basic_string<charT,traits,Allocator>&&
+//   operator+(const charT* lhs, basic_string<charT,traits,Allocator>&& rhs);
+
+#include <string>
+#include <cassert>
+
+template <class S>
+void
+test0(const typename S::value_type* lhs, const S& rhs, const S& x)
+{
+    assert(lhs + rhs == x);
+}
+
+#ifdef _LIBCPP_MOVE
+
+template <class S>
+void
+test1(const typename S::value_type* lhs, S&& rhs, const S& x)
+{
+    assert(lhs + move(rhs) == x);
+}
+
+#endif
+
+typedef std::string S;
+
+int main()
+{
+    test0("", S(""), S(""));
+    test0("", S("12345"), S("12345"));
+    test0("", S("1234567890"), S("1234567890"));
+    test0("", S("12345678901234567890"), S("12345678901234567890"));
+    test0("abcde", S(""), S("abcde"));
+    test0("abcde", S("12345"), S("abcde12345"));
+    test0("abcde", S("1234567890"), S("abcde1234567890"));
+    test0("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
+    test0("abcdefghij", S(""), S("abcdefghij"));
+    test0("abcdefghij", S("12345"), S("abcdefghij12345"));
+    test0("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
+    test0("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+    test0("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
+    test0("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
+    test0("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test0("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+
+#ifdef _LIBCPP_MOVE
+
+    test1("", S(""), S(""));
+    test1("", S("12345"), S("12345"));
+    test1("", S("1234567890"), S("1234567890"));
+    test1("", S("12345678901234567890"), S("12345678901234567890"));
+    test1("abcde", S(""), S("abcde"));
+    test1("abcde", S("12345"), S("abcde12345"));
+    test1("abcde", S("1234567890"), S("abcde1234567890"));
+    test1("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
+    test1("abcdefghij", S(""), S("abcdefghij"));
+    test1("abcdefghij", S("12345"), S("abcdefghij12345"));
+    test1("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
+    test1("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+    test1("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
+    test1("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
+    test1("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test1("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+
+#endif
+}