197403Sobrien// Locale support -*- C++ -*-
297403Sobrien
3169691Skan// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
497403Sobrien// Free Software Foundation, Inc.
597403Sobrien//
697403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
797403Sobrien// software; you can redistribute it and/or modify it under the
897403Sobrien// terms of the GNU General Public License as published by the
997403Sobrien// Free Software Foundation; either version 2, or (at your option)
1097403Sobrien// any later version.
1197403Sobrien
1297403Sobrien// This library is distributed in the hope that it will be useful,
1397403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1497403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1597403Sobrien// GNU General Public License for more details.
1697403Sobrien
1797403Sobrien// You should have received a copy of the GNU General Public License along
1897403Sobrien// with this library; see the file COPYING.  If not, write to the Free
19169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
2097403Sobrien// USA.
2197403Sobrien
2297403Sobrien// As a special exception, you may use this file as part of a free software
2397403Sobrien// library without restriction.  Specifically, if other files instantiate
2497403Sobrien// templates or use macros or inline functions from this file, or you compile
2597403Sobrien// this file and link it with other files to produce an executable, this
2697403Sobrien// file does not by itself cause the resulting executable to be covered by
2797403Sobrien// the GNU General Public License.  This exception does not however
2897403Sobrien// invalidate any other reasons why the executable file might be covered by
2997403Sobrien// the GNU General Public License.
3097403Sobrien
3197403Sobrien/** @file localefwd.h
3297403Sobrien *  This is an internal header file, included by other library headers.
3397403Sobrien *  You should not attempt to use it directly.
3497403Sobrien */
3597403Sobrien
36169691Skan//
37169691Skan// ISO C++ 14882: 22.1  Locales
38169691Skan//
39169691Skan
40132720Skan#ifndef _LOCALE_FWD_H
41132720Skan#define _LOCALE_FWD_H 1
4297403Sobrien
4397403Sobrien#pragma GCC system_header
4497403Sobrien
4597403Sobrien#include <bits/c++config.h>
4697403Sobrien#include <bits/c++locale.h>     // Defines __c_locale, config-specific includes
47132720Skan#include <iosfwd>		// For ostreambuf_iterator, istreambuf_iterator
4897403Sobrien#include <bits/functexcept.h>
4997403Sobrien
50169691Skan_GLIBCXX_BEGIN_NAMESPACE(std)
51169691Skan
5297403Sobrien  // 22.1.1 Locale
5397403Sobrien  class locale;
5497403Sobrien
5597403Sobrien  // 22.1.3 Convenience interfaces
56132720Skan  template<typename _CharT>
57132720Skan    inline bool
5897403Sobrien    isspace(_CharT, const locale&);
5997403Sobrien
60132720Skan  template<typename _CharT>
61132720Skan    inline bool
6297403Sobrien    isprint(_CharT, const locale&);
6397403Sobrien
64132720Skan  template<typename _CharT>
65132720Skan    inline bool
6697403Sobrien    iscntrl(_CharT, const locale&);
6797403Sobrien
68132720Skan  template<typename _CharT>
69132720Skan    inline bool
7097403Sobrien    isupper(_CharT, const locale&);
7197403Sobrien
72132720Skan  template<typename _CharT>
73132720Skan    inline bool
7497403Sobrien    islower(_CharT, const locale&);
7597403Sobrien
76132720Skan  template<typename _CharT>
77132720Skan    inline bool
7897403Sobrien    isalpha(_CharT, const locale&);
7997403Sobrien
80132720Skan  template<typename _CharT>
81132720Skan    inline bool
8297403Sobrien    isdigit(_CharT, const locale&);
8397403Sobrien
84132720Skan  template<typename _CharT>
85132720Skan    inline bool
8697403Sobrien    ispunct(_CharT, const locale&);
8797403Sobrien
88132720Skan  template<typename _CharT>
89132720Skan    inline bool
9097403Sobrien    isxdigit(_CharT, const locale&);
9197403Sobrien
92132720Skan  template<typename _CharT>
93132720Skan    inline bool
9497403Sobrien    isalnum(_CharT, const locale&);
9597403Sobrien
96132720Skan  template<typename _CharT>
97132720Skan    inline bool
9897403Sobrien    isgraph(_CharT, const locale&);
9997403Sobrien
100132720Skan  template<typename _CharT>
101132720Skan    inline _CharT
10297403Sobrien    toupper(_CharT, const locale&);
10397403Sobrien
104132720Skan  template<typename _CharT>
105132720Skan    inline _CharT
10697403Sobrien    tolower(_CharT, const locale&);
10797403Sobrien
10897403Sobrien  // 22.2.1 and 22.2.1.3 ctype
10997403Sobrien  class ctype_base;
110132720Skan  template<typename _CharT>
11197403Sobrien    class ctype;
11297403Sobrien  template<> class ctype<char>;
113132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
11497403Sobrien  template<> class ctype<wchar_t>;
11597403Sobrien#endif
116132720Skan  template<typename _CharT>
11797403Sobrien    class ctype_byname;
11897403Sobrien  // NB: Specialized for char and wchar_t in locale_facets.h.
11997403Sobrien
12097403Sobrien  class codecvt_base;
12197403Sobrien  class __enc_traits;
12297403Sobrien  template<typename _InternT, typename _ExternT, typename _StateT>
12397403Sobrien    class codecvt;
12497403Sobrien  template<> class codecvt<char, char, mbstate_t>;
125132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
12697403Sobrien  template<> class codecvt<wchar_t, char, mbstate_t>;
12797403Sobrien#endif
12897403Sobrien  template<typename _InternT, typename _ExternT, typename _StateT>
12997403Sobrien    class codecvt_byname;
13097403Sobrien
13197403Sobrien  // 22.2.2 and 22.2.3 numeric
132169691Skan_GLIBCXX_BEGIN_LDBL_NAMESPACE
13397403Sobrien  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
13497403Sobrien    class num_get;
13597403Sobrien  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
13697403Sobrien    class num_put;
137169691Skan_GLIBCXX_END_LDBL_NAMESPACE
13897403Sobrien  template<typename _CharT> class numpunct;
13997403Sobrien  template<typename _CharT> class numpunct_byname;
14097403Sobrien
14197403Sobrien  // 22.2.4 collation
142132720Skan  template<typename _CharT>
14397403Sobrien    class collate;
144132720Skan  template<typename _CharT> class
14597403Sobrien    collate_byname;
14697403Sobrien
14797403Sobrien  // 22.2.5 date and time
14897403Sobrien  class time_base;
14997403Sobrien  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
15097403Sobrien    class time_get;
15197403Sobrien  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
15297403Sobrien    class time_get_byname;
15397403Sobrien  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
15497403Sobrien    class time_put;
15597403Sobrien  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
15697403Sobrien    class time_put_byname;
15797403Sobrien
15897403Sobrien  // 22.2.6 money
15997403Sobrien  class money_base;
160169691Skan_GLIBCXX_BEGIN_LDBL_NAMESPACE
16197403Sobrien  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
16297403Sobrien    class money_get;
16397403Sobrien  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
16497403Sobrien    class money_put;
165169691Skan_GLIBCXX_END_LDBL_NAMESPACE
166132720Skan  template<typename _CharT, bool _Intl = false>
16797403Sobrien    class moneypunct;
168132720Skan  template<typename _CharT, bool _Intl = false>
16997403Sobrien    class moneypunct_byname;
17097403Sobrien
17197403Sobrien  // 22.2.7 message retrieval
17297403Sobrien  class messages_base;
173132720Skan  template<typename _CharT>
17497403Sobrien    class messages;
175132720Skan  template<typename _CharT>
17697403Sobrien    class messages_byname;
17797403Sobrien
17897403Sobrien  template<typename _Facet>
179132720Skan    bool
180132720Skan    has_facet(const locale& __loc) throw();
181132720Skan
182132720Skan  template<typename _Facet>
18397403Sobrien    const _Facet&
18497403Sobrien    use_facet(const locale& __loc);
18597403Sobrien
18697403Sobrien  template<typename _Facet>
187132720Skan    inline const _Facet&
188132720Skan    __check_facet(const _Facet* __f)
189132720Skan    {
190132720Skan      if (!__f)
191132720Skan	__throw_bad_cast();
192132720Skan      return *__f;
193132720Skan    }
19497403Sobrien
195169691Skan_GLIBCXX_END_NAMESPACE
196169691Skan
19797403Sobrien#endif
198