1  // <locale> Forward declarations -*- C++ -*-
       2  
       3  // Copyright (C) 1997-2023 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  // Under Section 7 of GPL version 3, you are granted additional
      17  // permissions described in the GCC Runtime Library Exception, version
      18  // 3.1, as published by the Free Software Foundation.
      19  
      20  // You should have received a copy of the GNU General Public License and
      21  // a copy of the GCC Runtime Library Exception along with this program;
      22  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23  // <http://www.gnu.org/licenses/>.
      24  
      25  /** @file bits/localefwd.h
      26   *  This is an internal header file, included by other library headers.
      27   *  Do not attempt to use it directly. @headername{locale}
      28   */
      29  
      30  //
      31  // ISO C++ 14882: 22.1  Locales
      32  //
      33  
      34  #ifndef _LOCALE_FWD_H
      35  #define _LOCALE_FWD_H 1
      36  
      37  #pragma GCC system_header
      38  
      39  #include <bits/c++config.h>
      40  #include <bits/c++locale.h>  // Defines __c_locale, config-specific include
      41  #include <iosfwd>            // For ostreambuf_iterator, istreambuf_iterator
      42  #include <cctype>
      43  
      44  namespace std _GLIBCXX_VISIBILITY(default)
      45  {
      46  _GLIBCXX_BEGIN_NAMESPACE_VERSION
      47  
      48    /** 
      49     *  @defgroup locales Locales
      50     *
      51     *  Classes and functions for internationalization and localization.
      52     */
      53  
      54    // 22.1.1 Locale
      55    class locale;
      56  
      57    template<typename _Facet>
      58      bool
      59      has_facet(const locale&) throw();
      60  
      61    template<typename _Facet>
      62      const _Facet&
      63      use_facet(const locale&);
      64  
      65    // 22.1.3 Convenience interfaces
      66    template<typename _CharT>
      67      bool
      68      isspace(_CharT, const locale&);
      69  
      70    template<typename _CharT>
      71      bool
      72      isprint(_CharT, const locale&);
      73  
      74    template<typename _CharT>
      75      bool
      76      iscntrl(_CharT, const locale&);
      77  
      78    template<typename _CharT>
      79      bool
      80      isupper(_CharT, const locale&);
      81  
      82    template<typename _CharT>
      83      bool
      84      islower(_CharT, const locale&);
      85  
      86    template<typename _CharT>
      87      bool
      88      isalpha(_CharT, const locale&);
      89  
      90    template<typename _CharT>
      91      bool
      92      isdigit(_CharT, const locale&);
      93  
      94    template<typename _CharT>
      95      bool
      96      ispunct(_CharT, const locale&);
      97  
      98    template<typename _CharT>
      99      bool
     100      isxdigit(_CharT, const locale&);
     101  
     102    template<typename _CharT>
     103      bool
     104      isalnum(_CharT, const locale&);
     105  
     106    template<typename _CharT>
     107      bool
     108      isgraph(_CharT, const locale&);
     109  
     110  #if __cplusplus >= 201103L
     111    template<typename _CharT>
     112      bool
     113      isblank(_CharT, const locale&);
     114  #endif
     115  
     116    template<typename _CharT>
     117      _CharT
     118      toupper(_CharT, const locale&);
     119  
     120    template<typename _CharT>
     121      _CharT
     122      tolower(_CharT, const locale&);
     123  
     124    // 22.2.1 and 22.2.1.3 ctype
     125    struct ctype_base;
     126    template<typename _CharT>
     127      class ctype;
     128    template<> class ctype<char>;
     129  #ifdef _GLIBCXX_USE_WCHAR_T
     130    template<> class ctype<wchar_t>;
     131  #endif
     132    template<typename _CharT>
     133      class ctype_byname;
     134    // NB: Specialized for char and wchar_t in locale_facets.h.
     135  
     136    class codecvt_base;
     137    template<typename _InternT, typename _ExternT, typename _StateT>
     138      class codecvt;
     139    template<> class codecvt<char, char, mbstate_t>;
     140  #ifdef _GLIBCXX_USE_WCHAR_T
     141    template<> class codecvt<wchar_t, char, mbstate_t>;
     142  #endif
     143  #if __cplusplus >= 201103L
     144    template<> class codecvt<char16_t, char, mbstate_t>;
     145    template<> class codecvt<char32_t, char, mbstate_t>;
     146  #ifdef _GLIBCXX_USE_CHAR8_T
     147    template<> class codecvt<char16_t, char8_t, mbstate_t>;
     148    template<> class codecvt<char32_t, char8_t, mbstate_t>;
     149  #endif
     150  #endif
     151    template<typename _InternT, typename _ExternT, typename _StateT>
     152      class codecvt_byname;
     153  
     154    // 22.2.2 and 22.2.3 numeric
     155  _GLIBCXX_BEGIN_NAMESPACE_LDBL
     156    template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
     157      class num_get;
     158    template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
     159      class num_put;
     160  _GLIBCXX_END_NAMESPACE_LDBL
     161  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     162    template<typename _CharT> class numpunct;
     163    template<typename _CharT> class numpunct_byname;
     164  _GLIBCXX_END_NAMESPACE_CXX11
     165  
     166  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     167    // 22.2.4 collation
     168    template<typename _CharT>
     169      class collate;
     170    template<typename _CharT>
     171      class collate_byname;
     172  _GLIBCXX_END_NAMESPACE_CXX11
     173  
     174    // 22.2.5 date and time
     175    class time_base;
     176  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     177    template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
     178      class time_get;
     179    template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
     180      class time_get_byname;
     181  _GLIBCXX_END_NAMESPACE_CXX11
     182    template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
     183      class time_put;
     184    template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
     185      class time_put_byname;
     186  
     187    // 22.2.6 money
     188    class money_base;
     189  _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11
     190    template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
     191      class money_get;
     192    template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
     193      class money_put;
     194  _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11
     195  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     196    template<typename _CharT, bool _Intl = false>
     197      class moneypunct;
     198    template<typename _CharT, bool _Intl = false>
     199      class moneypunct_byname;
     200  _GLIBCXX_END_NAMESPACE_CXX11
     201  
     202    // 22.2.7 message retrieval
     203    struct messages_base;
     204  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     205    template<typename _CharT>
     206      class messages;
     207    template<typename _CharT>
     208      class messages_byname;
     209  _GLIBCXX_END_NAMESPACE_CXX11
     210  
     211  _GLIBCXX_END_NAMESPACE_VERSION
     212  } // namespace std
     213  
     214  #endif