1// -*- C++ -*- 2//===--------------------------- format -----------------------------------===// 3// 4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5// See https://llvm.org/LICENSE.txt for license information. 6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef _LIBCPP_FORMAT 11#define _LIBCPP_FORMAT 12 13/* 14 15namespace std { 16 // [format.error], class format_error 17 class format_error : public runtime_error { 18 public: 19 explicit format_error(const string& what_arg); 20 explicit format_error(const char* what_arg); 21 }; 22 23 // [format.parse.ctx], class template basic_format_parse_context 24 template<class charT> 25 class basic_format_parse_context { 26 public: 27 using char_type = charT; 28 using const_iterator = typename basic_string_view<charT>::const_iterator; 29 using iterator = const_iterator; 30 31 private: 32 iterator begin_; // exposition only 33 iterator end_; // exposition only 34 enum indexing { unknown, manual, automatic }; // exposition only 35 indexing indexing_; // exposition only 36 size_t next_arg_id_; // exposition only 37 size_t num_args_; // exposition only 38 39 public: 40 constexpr explicit basic_format_parse_context(basic_string_view<charT> fmt, 41 size_t num_args = 0) noexcept; 42 basic_format_parse_context(const basic_format_parse_context&) = delete; 43 basic_format_parse_context& operator=(const basic_format_parse_context&) = delete; 44 45 constexpr const_iterator begin() const noexcept; 46 constexpr const_iterator end() const noexcept; 47 constexpr void advance_to(const_iterator it); 48 49 constexpr size_t next_arg_id(); 50 constexpr void check_arg_id(size_t id); 51 }; 52 using format_parse_context = basic_format_parse_context<char>; 53 using wformat_parse_context = basic_format_parse_context<wchar_t>; 54} 55 56*/ 57 58// Make sure all feature tests macros are always available. 59#include <version> 60// Only enable the contents of the header when libc++ was build with LIBCXX_ENABLE_INCOMPLETE_FEATURES enabled 61#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) 62 63#include <__config> 64#include <__format/format_error.h> 65#include <__format/format_parse_context.h> 66 67#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 68# pragma GCC system_header 69#endif 70 71_LIBCPP_PUSH_MACROS 72#include <__undef_macros> 73 74_LIBCPP_BEGIN_NAMESPACE_STD 75 76#if _LIBCPP_STD_VER > 17 77 78#endif //_LIBCPP_STD_VER > 17 79 80_LIBCPP_END_NAMESPACE_STD 81 82_LIBCPP_POP_MACROS 83 84#endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT) 85 86#endif // _LIBCPP_FORMAT 87