103a78d15Sespie // Explicit instantiation file.
203a78d15Sespie 
303a78d15Sespie // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
403a78d15Sespie // Free Software Foundation, Inc.
503a78d15Sespie //
603a78d15Sespie // This file is part of the GNU ISO C++ Library.  This library is free
703a78d15Sespie // software; you can redistribute it and/or modify it under the
803a78d15Sespie // terms of the GNU General Public License as published by the
903a78d15Sespie // Free Software Foundation; either version 2, or (at your option)
1003a78d15Sespie // any later version.
1103a78d15Sespie 
1203a78d15Sespie // This library is distributed in the hope that it will be useful,
1303a78d15Sespie // but WITHOUT ANY WARRANTY; without even the implied warranty of
1403a78d15Sespie // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1503a78d15Sespie // GNU General Public License for more details.
1603a78d15Sespie 
1703a78d15Sespie // You should have received a copy of the GNU General Public License along
1803a78d15Sespie // with this library; see the file COPYING.  If not, write to the Free
1903a78d15Sespie // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2003a78d15Sespie // USA.
2103a78d15Sespie 
2203a78d15Sespie // As a special exception, you may use this file as part of a free software
2303a78d15Sespie // library without restriction.  Specifically, if other files instantiate
2403a78d15Sespie // templates or use macros or inline functions from this file, or you compile
2503a78d15Sespie // this file and link it with other files to produce an executable, this
2603a78d15Sespie // file does not by itself cause the resulting executable to be covered by
2703a78d15Sespie // the GNU General Public License.  This exception does not however
2803a78d15Sespie // invalidate any other reasons why the executable file might be covered by
2903a78d15Sespie // the GNU General Public License.
3003a78d15Sespie 
3103a78d15Sespie //
3203a78d15Sespie // ISO C++ 14882:
3303a78d15Sespie //
3403a78d15Sespie 
3503a78d15Sespie #include <string>
3603a78d15Sespie #include <istream>
3703a78d15Sespie #include <ostream>
3803a78d15Sespie #include <algorithm>
3903a78d15Sespie #include <vector>
4003a78d15Sespie #include <bits/atomicity.h>
4103a78d15Sespie 
4203a78d15Sespie namespace std
4303a78d15Sespie {
4403a78d15Sespie   // string related to iostreams
4503a78d15Sespie   template
4603a78d15Sespie     basic_istream<char>&
4703a78d15Sespie     operator>>(basic_istream<char>&, string&);
4803a78d15Sespie   template
4903a78d15Sespie     basic_ostream<char>&
5003a78d15Sespie     operator<<(basic_ostream<char>&, const string&);
5103a78d15Sespie   template
5203a78d15Sespie     basic_istream<char>&
5303a78d15Sespie     getline(basic_istream<char>&, string&, char);
5403a78d15Sespie   template
5503a78d15Sespie     basic_istream<char>&
5603a78d15Sespie     getline(basic_istream<char>&, string&);
57*c2fb3212Sespie #if defined(_GLIBCPP_USE_WCHAR_T) || defined(_GLIBCPP_USE_TYPE_WCHAR_T)
5803a78d15Sespie   template
5903a78d15Sespie     basic_istream<wchar_t>&
6003a78d15Sespie     operator>>(basic_istream<wchar_t>&, wstring&);
6103a78d15Sespie   template
6203a78d15Sespie     basic_ostream<wchar_t>&
6303a78d15Sespie     operator<<(basic_ostream<wchar_t>&, const wstring&);
6403a78d15Sespie   template
6503a78d15Sespie     basic_istream<wchar_t>&
6603a78d15Sespie     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
6703a78d15Sespie   template
6803a78d15Sespie     basic_istream<wchar_t>&
6903a78d15Sespie     getline(basic_istream<wchar_t>&, wstring&);
7003a78d15Sespie #endif
7103a78d15Sespie #ifdef _GLIBCPP_INST_ATOMICITY_LOCK
7203a78d15Sespie   template volatile int __Atomicity_lock<0>::_S_atomicity_lock;
7303a78d15Sespie #endif
7403a78d15Sespie 
7503a78d15Sespie #if 1
7603a78d15Sespie   // XXX
7703a78d15Sespie   // 2002-05-24 These are no longer needed and should eventually be deleted.
7803a78d15Sespie   template
7903a78d15Sespie     string*
8003a78d15Sespie     __uninitialized_fill_n_aux<string*, size_t, string>
8103a78d15Sespie     (string*, size_t, string const &, __false_type);
8203a78d15Sespie 
8303a78d15Sespie   template
8403a78d15Sespie     string*
8503a78d15Sespie     __uninitialized_copy_aux<vector<string>::const_iterator, string *>
8603a78d15Sespie     (vector<string>::const_iterator, vector<string>::const_iterator,
8703a78d15Sespie      string*, __false_type);
8803a78d15Sespie #endif
8903a78d15Sespie } // namespace std
9003a78d15Sespie 
9103a78d15Sespie #ifdef _GLIBCPP_NEED_GENERIC_MUTEX
9203a78d15Sespie namespace __gnu_cxx
9303a78d15Sespie {
9403a78d15Sespie #ifdef __GTHREAD_MUTEX_INIT
9503a78d15Sespie   __gthread_mutex_t _Atomic_add_mutex = __GTHREAD_MUTEX_INIT;
9603a78d15Sespie #else
9703a78d15Sespie   // generic atomicity.h without static initialization
9803a78d15Sespie   __gthread_mutex_t _Atomic_add_mutex;
9903a78d15Sespie   __gthread_once_t _Atomic_add_mutex_once = __GTHREAD_ONCE_INIT;
10003a78d15Sespie   void __gthread_atomic_add_mutex_once()
10103a78d15Sespie   {
10203a78d15Sespie     __GTHREAD_MUTEX_INIT_FUNCTION (&_Atomic_add_mutex);
10303a78d15Sespie   }
10403a78d15Sespie #endif
10503a78d15Sespie } // namespace __gnu_cxx
10603a78d15Sespie #endif // _GLIBCPP_NEED_GLOBAL_MUTEX
10703a78d15Sespie 
108