1// Components for manipulating sequences of characters -*- C++ -*-
2
3// Copyright (C) 1997, 1998, 2009, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
4// Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// Under Section 7 of GPL version 3, you are granted additional
18// permissions described in the GCC Runtime Library Exception, version
19// 3.1, as published by the Free Software Foundation.
20
21// You should have received a copy of the GNU General Public License and
22// a copy of the GCC Runtime Library Exception along with this program;
23// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24// <http://www.gnu.org/licenses/>.
25
26//
27// ISO C++ 14882: 21  Strings library
28//
29
30// Written by Jason Merrill based upon the specification by Takanori Adachi
31// in ANSI X3J16/94-0013R2.  Rewritten by Nathan Myers.
32
33#include <string>
34
35// Instantiation configuration.
36#ifndef C
37# define C char
38#endif
39
40_GLIBCXX_BEGIN_NAMESPACE(std)
41
42  typedef basic_string<C> S;
43
44  template class basic_string<C>;
45  template S operator+(const C*, const S&);
46  template S operator+(C, const S&);
47  template S operator+(const S&, const S&);
48
49  // Only one template keyword allowed here.
50  // See core issue #46 (NAD)
51  // http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_closed.html#46
52  template
53    S::basic_string(C*, C*, const allocator<C>&);
54
55  template
56    S::basic_string(const C*, const C*, const allocator<C>&);
57
58  template
59    S::basic_string(S::iterator, S::iterator, const allocator<C>&);
60
61  template
62    C*
63    S::_S_construct(S::iterator, S::iterator,
64		    const allocator<C>&, forward_iterator_tag);
65
66  template
67    C*
68    S::_S_construct(C*, C*, const allocator<C>&, forward_iterator_tag);
69
70  template
71    C*
72    S::_S_construct(const C*, const C*, const allocator<C>&,
73		    forward_iterator_tag);
74
75_GLIBCXX_END_NAMESPACE
76
77_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
78
79  using std::S;
80  template bool operator==(const S::iterator&, const S::iterator&);
81  template bool operator==(const S::const_iterator&, const S::const_iterator&);
82
83_GLIBCXX_END_NAMESPACE
84