1e87479b0SArthur O'Dwyer //===----------------------------------------------------------------------===//
2e87479b0SArthur O'Dwyer //
3e87479b0SArthur O'Dwyer // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e87479b0SArthur O'Dwyer // See https://llvm.org/LICENSE.txt for license information.
5e87479b0SArthur O'Dwyer // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e87479b0SArthur O'Dwyer //
7e87479b0SArthur O'Dwyer //===----------------------------------------------------------------------===//
8e87479b0SArthur O'Dwyer 
9e87479b0SArthur O'Dwyer // <string>
10e87479b0SArthur O'Dwyer 
11e87479b0SArthur O'Dwyer #include <cassert>
12e87479b0SArthur O'Dwyer #include <string>
13e87479b0SArthur O'Dwyer 
14dcffa7d3SNikolas Klauser #include "test_macros.h"
15dcffa7d3SNikolas Klauser 
16e87479b0SArthur O'Dwyer struct Incomplete;
17e87479b0SArthur O'Dwyer template<class T> struct Holder { T t; };
18e87479b0SArthur O'Dwyer 
19e87479b0SArthur O'Dwyer template<class T>
20e87479b0SArthur O'Dwyer struct Charlike {
21e87479b0SArthur O'Dwyer     char ch_;
CharlikeCharlike2285e9b268SNikolas Klauser     TEST_CONSTEXPR Charlike(char ch) : ch_(ch) {}
operator charCharlike2385e9b268SNikolas Klauser     TEST_CONSTEXPR operator char() const { return ch_; }
24e87479b0SArthur O'Dwyer };
25e87479b0SArthur O'Dwyer 
test()26*425620ccSNikolas Klauser TEST_CONSTEXPR_CXX20 bool test() {
27e87479b0SArthur O'Dwyer   std::string s;
28e87479b0SArthur O'Dwyer   Charlike<Holder<Incomplete> > a[] = {'m', 'a', 'h', 'i'};
29e87479b0SArthur O'Dwyer   s.append(a, a+4);
30e87479b0SArthur O'Dwyer   s.assign(a, a+4);
31e87479b0SArthur O'Dwyer   s.insert(s.begin(), a, a+4);
32e87479b0SArthur O'Dwyer   s.replace(s.begin(), s.begin()+4, a, a+4);
33e87479b0SArthur O'Dwyer   assert(s == "mahimahi");
34e87479b0SArthur O'Dwyer 
35dcffa7d3SNikolas Klauser   return true;
36dcffa7d3SNikolas Klauser }
37dcffa7d3SNikolas Klauser 
main(int,char **)38dcffa7d3SNikolas Klauser int main(int, char**)
39dcffa7d3SNikolas Klauser {
40dcffa7d3SNikolas Klauser   test();
41dcffa7d3SNikolas Klauser #if TEST_STD_VER > 17
42*425620ccSNikolas Klauser   static_assert(test());
43dcffa7d3SNikolas Klauser #endif
44dcffa7d3SNikolas Klauser 
45e87479b0SArthur O'Dwyer   return 0;
46e87479b0SArthur O'Dwyer }
47