1 // Explicit instantiation file.
2 
3 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
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 2, 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 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING.  If not, write to the Free
19 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20 // USA.
21 
22 // As a special exception, you may use this file as part of a free software
23 // library without restriction.  Specifically, if other files instantiate
24 // templates or use macros or inline functions from this file, or you compile
25 // this file and link it with other files to produce an executable, this
26 // file does not by itself cause the resulting executable to be covered by
27 // the GNU General Public License.  This exception does not however
28 // invalidate any other reasons why the executable file might be covered by
29 // the GNU General Public License.
30 
31 //
32 // ISO C++ 14882:
33 //
34 
35 #include <string>
36 #include <istream>
37 #include <ostream>
38 #include <algorithm>
39 #include <vector>
40 #include <bits/atomicity.h>
41 
42 namespace std
43 {
44   // string related to iostreams
45   template
46     basic_istream<char>&
47     operator>>(basic_istream<char>&, string&);
48   template
49     basic_ostream<char>&
50     operator<<(basic_ostream<char>&, const string&);
51   template
52     basic_istream<char>&
53     getline(basic_istream<char>&, string&, char);
54   template
55     basic_istream<char>&
56     getline(basic_istream<char>&, string&);
57 #ifdef _GLIBCPP_USE_WCHAR_T
58   template
59     basic_istream<wchar_t>&
60     operator>>(basic_istream<wchar_t>&, wstring&);
61   template
62     basic_ostream<wchar_t>&
63     operator<<(basic_ostream<wchar_t>&, const wstring&);
64   template
65     basic_istream<wchar_t>&
66     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
67   template
68     basic_istream<wchar_t>&
69     getline(basic_istream<wchar_t>&, wstring&);
70 #endif
71 #ifdef _GLIBCPP_INST_ATOMICITY_LOCK
72   template volatile int __Atomicity_lock<0>::_S_atomicity_lock;
73 #endif
74 
75 #if 1
76   // XXX
77   // 2002-05-24 These are no longer needed and should eventually be deleted.
78   template
79     string*
80     __uninitialized_fill_n_aux<string*, size_t, string>
81     (string*, size_t, string const &, __false_type);
82 
83   template
84     string*
85     __uninitialized_copy_aux<vector<string>::const_iterator, string *>
86     (vector<string>::const_iterator, vector<string>::const_iterator,
87      string*, __false_type);
88 #endif
89 } // namespace std
90 
91 #ifdef _GLIBCPP_NEED_GENERIC_MUTEX
92 namespace __gnu_cxx
93 {
94 #ifdef __GTHREAD_MUTEX_INIT
95   __gthread_mutex_t _Atomic_add_mutex = __GTHREAD_MUTEX_INIT;
96 #else
97   // generic atomicity.h without static initialization
98   __gthread_mutex_t _Atomic_add_mutex;
99   __gthread_once_t _Atomic_add_mutex_once = __GTHREAD_ONCE_INIT;
100   void __gthread_atomic_add_mutex_once()
101   {
102     __GTHREAD_MUTEX_INIT_FUNCTION (&_Atomic_add_mutex);
103   }
104 #endif
105 } // namespace __gnu_cxx
106 #endif // _GLIBCPP_NEED_GLOBAL_MUTEX
107 
108