1// { dg-do compile }
2
3// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20#include <string>
21
22namespace std {
23  //  lib.char.traits, character traits:
24  template<class charT>
25  struct char_traits;
26  template <> struct char_traits<char>;
27  template <> struct char_traits<wchar_t>;
28
29  //  lib.basic.string, basic_string:
30  template<class charT, class traits, class Allocator >
31  class basic_string;
32
33  template<class charT, class traits, class Allocator>
34  basic_string<charT,traits,Allocator>
35  operator+(const basic_string<charT,traits,Allocator>& lhs,
36	    const basic_string<charT,traits,Allocator>& rhs);
37  template<class charT, class traits, class Allocator>
38  basic_string<charT,traits,Allocator>
39  operator+(const charT* lhs,
40	    const basic_string<charT,traits,Allocator>& rhs);
41  template<class charT, class traits, class Allocator>
42  basic_string<charT,traits,Allocator>
43  operator+(charT lhs, const basic_string<charT,traits,Allocator>& rhs);
44  template<class charT, class traits, class Allocator>
45  basic_string<charT,traits,Allocator>
46  operator+(const basic_string<charT,traits,Allocator>& lhs,
47	    const charT* rhs);
48  template<class charT, class traits, class Allocator>
49  basic_string<charT,traits,Allocator>
50  operator+(const basic_string<charT,traits,Allocator>& lhs, charT rhs);
51
52  template<class charT, class traits, class Allocator>
53  bool operator==(const basic_string<charT,traits,Allocator>& lhs,
54		  const basic_string<charT,traits,Allocator>& rhs);
55  template<class charT, class traits, class Allocator>
56  bool operator==(const charT* lhs,
57		  const basic_string<charT,traits,Allocator>& rhs);
58  template<class charT, class traits, class Allocator>
59  bool operator==(const basic_string<charT,traits,Allocator>& lhs,
60		  const charT* rhs);
61  template<class charT, class traits, class Allocator>
62  bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
63		  const basic_string<charT,traits,Allocator>& rhs);
64  template<class charT, class traits, class Allocator>
65  bool operator!=(const charT* lhs,
66		  const basic_string<charT,traits,Allocator>& rhs);
67  template<class charT, class traits, class Allocator>
68  bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
69		  const charT* rhs);
70
71  template<class charT, class traits, class Allocator>
72  bool operator< (const basic_string<charT,traits,Allocator>& lhs,
73		  const basic_string<charT,traits,Allocator>& rhs);
74  template<class charT, class traits, class Allocator>
75  bool operator< (const basic_string<charT,traits,Allocator>& lhs,
76		  const charT* rhs);
77  template<class charT, class traits, class Allocator>
78  bool operator< (const charT* lhs,
79		  const basic_string<charT,traits,Allocator>& rhs);
80  template<class charT, class traits, class Allocator>
81  bool operator> (const basic_string<charT,traits,Allocator>& lhs,
82		  const basic_string<charT,traits,Allocator>& rhs);
83  template<class charT, class traits, class Allocator>
84  bool operator> (const basic_string<charT,traits,Allocator>& lhs,
85		  const charT* rhs);
86  template<class charT, class traits, class Allocator>
87  bool operator> (const charT* lhs,
88		  const basic_string<charT,traits,Allocator>& rhs);
89
90  template<class charT, class traits, class Allocator>
91  bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
92		  const basic_string<charT,traits,Allocator>& rhs);
93  template<class charT, class traits, class Allocator>
94  bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
95		  const charT* rhs);
96  template<class charT, class traits, class Allocator>
97  bool operator<=(const charT* lhs,
98		  const basic_string<charT,traits,Allocator>& rhs);
99  template<class charT, class traits, class Allocator>
100  bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
101		  const basic_string<charT,traits,Allocator>& rhs);
102  template<class charT, class traits, class Allocator>
103  bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
104		  const charT* rhs);
105  template<class charT, class traits, class Allocator>
106  bool operator>=(const charT* lhs,
107		  const basic_string<charT,traits,Allocator>& rhs);
108
109  //  lib.string.special:
110  template<class charT, class traits, class Allocator>
111  void swap(basic_string<charT,traits,Allocator>& lhs,
112	    basic_string<charT,traits,Allocator>& rhs);
113
114  template<class charT, class traits, class Allocator>
115  basic_istream<charT,traits>&
116  operator>>(basic_istream<charT,traits>& is,
117	     basic_string<charT,traits,Allocator>& str);
118  template<class charT, class traits, class Allocator>
119  basic_ostream<charT, traits>&
120  operator<<(basic_ostream<charT, traits>& os,
121	     const basic_string<charT,traits,Allocator>& str);
122  template<class charT, class traits, class Allocator>
123  basic_istream<charT,traits>&
124  getline(basic_istream<charT,traits>& is,
125	  basic_string<charT,traits,Allocator>& str,
126	  charT  delim);
127  template<class charT, class traits, class Allocator>
128  basic_istream<charT,traits>&
129  getline(basic_istream<charT,traits>& is,
130	  basic_string<charT,traits,Allocator>& str);
131
132  typedef basic_string<char> string;
133  typedef basic_string<wchar_t> wstring;
134}
135