1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <string>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template<class charT, class traits, class Allocator>
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   basic_string<charT,traits,Allocator>
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator+(const charT* lhs, const basic_string<charT,traits,Allocator>& rhs);
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template<class charT, class traits, class Allocator>
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   basic_string<charT,traits,Allocator>&&
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator+(const charT* lhs, basic_string<charT,traits,Allocator>&& rhs);
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <string>
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
235de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#include "min_allocator.h"
24ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class S>
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertest0(const typename S::value_type* lhs, const S& rhs, const S& x)
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(lhs + rhs == x);
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class S>
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertest1(const typename S::value_type* lhs, S&& rhs, const S& x)
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(lhs + move(rhs) == x);
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
45ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
46ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    typedef std::string S;
47ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("", S(""), S(""));
48ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("", S("12345"), S("12345"));
49ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("", S("1234567890"), S("1234567890"));
50ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("", S("12345678901234567890"), S("12345678901234567890"));
51ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcde", S(""), S("abcde"));
52ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcde", S("12345"), S("abcde12345"));
53ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcde", S("1234567890"), S("abcde1234567890"));
54ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
55ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghij", S(""), S("abcdefghij"));
56ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghij", S("12345"), S("abcdefghij12345"));
57ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
58ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
59ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
60ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
61ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
62ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test0("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
63ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
64ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
65ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
66ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("", S(""), S(""));
67ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("", S("12345"), S("12345"));
68ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("", S("1234567890"), S("1234567890"));
69ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("", S("12345678901234567890"), S("12345678901234567890"));
70ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcde", S(""), S("abcde"));
71ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcde", S("12345"), S("abcde12345"));
72ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcde", S("1234567890"), S("abcde1234567890"));
73ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
74ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghij", S(""), S("abcdefghij"));
75ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghij", S("12345"), S("abcdefghij12345"));
76ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
77ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
78ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
79ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
80ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
81ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    test1("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
82ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
83ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
84ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
85ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L
86ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
87ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("", S(""), S(""));
89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("", S("12345"), S("12345"));
90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("", S("1234567890"), S("1234567890"));
91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("", S("12345678901234567890"), S("12345678901234567890"));
92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcde", S(""), S("abcde"));
93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcde", S("12345"), S("abcde12345"));
94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcde", S("1234567890"), S("abcde1234567890"));
95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghij", S(""), S("abcdefghij"));
97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghij", S("12345"), S("abcdefghij12345"));
98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test0("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("", S(""), S(""));
108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("", S("12345"), S("12345"));
109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("", S("1234567890"), S("1234567890"));
110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("", S("12345678901234567890"), S("12345678901234567890"));
111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcde", S(""), S("abcde"));
112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcde", S("12345"), S("abcde12345"));
113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcde", S("1234567890"), S("abcde1234567890"));
114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcde", S("12345678901234567890"), S("abcde12345678901234567890"));
115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghij", S(""), S("abcdefghij"));
116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghij", S("12345"), S("abcdefghij12345"));
117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
121b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    test1("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
123b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
125ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
126ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif
127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
128