(root)/
gcc-13.2.0/
libstdc++-v3/
include/
bits/
regex_error.h
       1  // Errors for std::regex -*- C++ -*-
       2  
       3  // Copyright (C) 2010-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  /**
      26   * @file bits/regex_error.h
      27   * @brief Error and exception objects for the std regex library.
      28   *
      29   *  This is an internal header file, included by other library headers.
      30   *  Do not attempt to use it directly. @headername{regex}
      31   */
      32  
      33  namespace std _GLIBCXX_VISIBILITY(default)
      34  {
      35  _GLIBCXX_BEGIN_NAMESPACE_VERSION
      36  
      37  /**
      38   * @addtogroup regex
      39   * @{
      40   */
      41  
      42  namespace regex_constants
      43  {
      44    /**
      45     * @name 5.3 Error Types
      46     */
      47    ///@{
      48  
      49    enum error_type
      50      {
      51        _S_error_collate, // XXX should have been a non-zero value
      52        _S_error_ctype,
      53        _S_error_escape,
      54        _S_error_backref,
      55        _S_error_brack,
      56        _S_error_paren,
      57        _S_error_brace,
      58        _S_error_badbrace,
      59        _S_error_range,
      60        _S_error_space,
      61        _S_error_badrepeat,
      62        _S_error_complexity,
      63        _S_error_stack,
      64        _S_null,
      65        _S_grammar
      66      };
      67  
      68    /** The expression contained an invalid collating element name. */
      69    _GLIBCXX17_INLINE constexpr error_type error_collate(_S_error_collate);
      70  
      71    /** The expression contained an invalid character class name. */
      72    _GLIBCXX17_INLINE constexpr error_type error_ctype(_S_error_ctype);
      73  
      74    /**
      75     * The expression contained an invalid escaped character, or a trailing
      76     * escape.
      77     */
      78    _GLIBCXX17_INLINE constexpr error_type error_escape(_S_error_escape);
      79  
      80    /** The expression contained an invalid back reference. */
      81    _GLIBCXX17_INLINE constexpr error_type error_backref(_S_error_backref);
      82  
      83    /** The expression contained mismatched [ and ]. */
      84    _GLIBCXX17_INLINE constexpr error_type error_brack(_S_error_brack);
      85  
      86    /** The expression contained mismatched ( and ). */
      87    _GLIBCXX17_INLINE constexpr error_type error_paren(_S_error_paren);
      88  
      89    /** The expression contained mismatched { and } */
      90    _GLIBCXX17_INLINE constexpr error_type error_brace(_S_error_brace);
      91  
      92    /** The expression contained an invalid range in a {} expression. */
      93    _GLIBCXX17_INLINE constexpr error_type error_badbrace(_S_error_badbrace);
      94  
      95    /**
      96     * The expression contained an invalid character range,
      97     * such as [b-a] in most encodings.
      98     */
      99    _GLIBCXX17_INLINE constexpr error_type error_range(_S_error_range);
     100  
     101    /**
     102     * There was insufficient memory to convert the expression into a
     103     * finite state machine.
     104     */
     105    _GLIBCXX17_INLINE constexpr error_type error_space(_S_error_space);
     106  
     107    /**
     108     * One of <em>*?+{</em> was not preceded by a valid regular expression.
     109     */
     110    _GLIBCXX17_INLINE constexpr error_type error_badrepeat(_S_error_badrepeat);
     111  
     112    /**
     113     * The complexity of an attempted match against a regular expression
     114     * exceeded a pre-set level.
     115     */
     116    _GLIBCXX17_INLINE constexpr error_type error_complexity(_S_error_complexity);
     117  
     118    /**
     119     * There was insufficient memory to determine whether the
     120     * regular expression could match the specified character sequence.
     121     */
     122    _GLIBCXX17_INLINE constexpr error_type error_stack(_S_error_stack);
     123  
     124    ///@}
     125  } // namespace regex_constants
     126  
     127    // [7.8] Class regex_error
     128    /**
     129     * @brief A regular expression exception class.
     130     * @ingroup exceptions
     131     *
     132     * The regular expression library throws objects of this class on error.
     133     *
     134     * @headerfile regex
     135     * @since C++11
     136     */
     137    class regex_error : public std::runtime_error
     138    {
     139      using error_type = regex_constants::error_type;
     140  
     141      error_type _M_code;
     142  
     143    public:
     144      /**
     145       * @brief Constructs a regex_error object.
     146       *
     147       * @param __ecode the regex error code.
     148       */
     149      explicit
     150      regex_error(error_type __ecode);
     151  
     152      virtual ~regex_error() throw();
     153  
     154      /**
     155       * @brief Gets the regex error code.
     156       *
     157       * @returns the regex error code.
     158       */
     159      regex_constants::error_type
     160      code() const noexcept
     161      { return _M_code; }
     162  
     163    private:
     164      /// @cond undocumented
     165      regex_error(error_type __ecode, const char* __what)
     166      : std::runtime_error(__what), _M_code(__ecode)
     167      { }
     168  
     169      [[__noreturn__]]
     170      friend void
     171      __throw_regex_error(error_type __ecode __attribute__((__unused__)),
     172  			const char* __what __attribute__((__unused__)))
     173      { _GLIBCXX_THROW_OR_ABORT(regex_error(__ecode, __what)); }
     174      /// @endcond
     175    };
     176  
     177    /// @cond undocumented
     178  
     179    [[__noreturn__]]
     180    void
     181    __throw_regex_error(regex_constants::error_type __ecode);
     182  
     183    [[__noreturn__]]
     184    inline void
     185    __throw_regex_error(regex_constants::error_type __ecode, const char* __what);
     186  
     187    /// @endcond
     188  
     189    ///@} // group regex
     190  
     191  _GLIBCXX_END_NAMESPACE_VERSION
     192  } // namespace std