2010-05-12 03:42:16 +08:00
|
|
|
// -*- C++ -*-
|
2021-11-18 05:25:01 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
2010-05-12 03:42:16 +08:00
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2010-05-12 03:42:16 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef _LIBCPP_CINTTYPES
|
|
|
|
#define _LIBCPP_CINTTYPES
|
|
|
|
|
|
|
|
/*
|
|
|
|
cinttypes synopsis
|
|
|
|
|
|
|
|
This entire header is C99 / C++0X
|
|
|
|
|
|
|
|
#include <cstdint> // <cinttypes> includes <cstdint>
|
|
|
|
|
|
|
|
Macros:
|
|
|
|
|
|
|
|
PRId8
|
|
|
|
PRId16
|
|
|
|
PRId32
|
|
|
|
PRId64
|
|
|
|
|
|
|
|
PRIdLEAST8
|
|
|
|
PRIdLEAST16
|
|
|
|
PRIdLEAST32
|
|
|
|
PRIdLEAST64
|
|
|
|
|
|
|
|
PRIdFAST8
|
|
|
|
PRIdFAST16
|
|
|
|
PRIdFAST32
|
|
|
|
PRIdFAST64
|
|
|
|
|
|
|
|
PRIdMAX
|
|
|
|
PRIdPTR
|
|
|
|
|
|
|
|
PRIi8
|
|
|
|
PRIi16
|
|
|
|
PRIi32
|
|
|
|
PRIi64
|
|
|
|
|
|
|
|
PRIiLEAST8
|
|
|
|
PRIiLEAST16
|
|
|
|
PRIiLEAST32
|
|
|
|
PRIiLEAST64
|
|
|
|
|
|
|
|
PRIiFAST8
|
|
|
|
PRIiFAST16
|
|
|
|
PRIiFAST32
|
|
|
|
PRIiFAST64
|
|
|
|
|
|
|
|
PRIiMAX
|
|
|
|
PRIiPTR
|
|
|
|
|
|
|
|
PRIo8
|
|
|
|
PRIo16
|
|
|
|
PRIo32
|
|
|
|
PRIo64
|
|
|
|
|
|
|
|
PRIoLEAST8
|
|
|
|
PRIoLEAST16
|
|
|
|
PRIoLEAST32
|
|
|
|
PRIoLEAST64
|
|
|
|
|
|
|
|
PRIoFAST8
|
|
|
|
PRIoFAST16
|
|
|
|
PRIoFAST32
|
|
|
|
PRIoFAST64
|
|
|
|
|
|
|
|
PRIoMAX
|
|
|
|
PRIoPTR
|
|
|
|
|
|
|
|
PRIu8
|
|
|
|
PRIu16
|
|
|
|
PRIu32
|
|
|
|
PRIu64
|
|
|
|
|
|
|
|
PRIuLEAST8
|
|
|
|
PRIuLEAST16
|
|
|
|
PRIuLEAST32
|
|
|
|
PRIuLEAST64
|
|
|
|
|
|
|
|
PRIuFAST8
|
|
|
|
PRIuFAST16
|
|
|
|
PRIuFAST32
|
|
|
|
PRIuFAST64
|
|
|
|
|
|
|
|
PRIuMAX
|
|
|
|
PRIuPTR
|
|
|
|
|
|
|
|
PRIx8
|
|
|
|
PRIx16
|
|
|
|
PRIx32
|
|
|
|
PRIx64
|
|
|
|
|
|
|
|
PRIxLEAST8
|
|
|
|
PRIxLEAST16
|
|
|
|
PRIxLEAST32
|
|
|
|
PRIxLEAST64
|
|
|
|
|
|
|
|
PRIxFAST8
|
|
|
|
PRIxFAST16
|
|
|
|
PRIxFAST32
|
|
|
|
PRIxFAST64
|
|
|
|
|
|
|
|
PRIxMAX
|
|
|
|
PRIxPTR
|
|
|
|
|
|
|
|
PRIX8
|
|
|
|
PRIX16
|
|
|
|
PRIX32
|
|
|
|
PRIX64
|
|
|
|
|
|
|
|
PRIXLEAST8
|
|
|
|
PRIXLEAST16
|
|
|
|
PRIXLEAST32
|
|
|
|
PRIXLEAST64
|
|
|
|
|
|
|
|
PRIXFAST8
|
|
|
|
PRIXFAST16
|
|
|
|
PRIXFAST32
|
|
|
|
PRIXFAST64
|
|
|
|
|
|
|
|
PRIXMAX
|
|
|
|
PRIXPTR
|
|
|
|
|
|
|
|
SCNd8
|
|
|
|
SCNd16
|
|
|
|
SCNd32
|
|
|
|
SCNd64
|
|
|
|
|
|
|
|
SCNdLEAST8
|
|
|
|
SCNdLEAST16
|
|
|
|
SCNdLEAST32
|
|
|
|
SCNdLEAST64
|
|
|
|
|
|
|
|
SCNdFAST8
|
|
|
|
SCNdFAST16
|
|
|
|
SCNdFAST32
|
|
|
|
SCNdFAST64
|
|
|
|
|
|
|
|
SCNdMAX
|
|
|
|
SCNdPTR
|
|
|
|
|
|
|
|
SCNi8
|
|
|
|
SCNi16
|
|
|
|
SCNi32
|
|
|
|
SCNi64
|
|
|
|
|
|
|
|
SCNiLEAST8
|
|
|
|
SCNiLEAST16
|
|
|
|
SCNiLEAST32
|
|
|
|
SCNiLEAST64
|
|
|
|
|
|
|
|
SCNiFAST8
|
|
|
|
SCNiFAST16
|
|
|
|
SCNiFAST32
|
|
|
|
SCNiFAST64
|
|
|
|
|
|
|
|
SCNiMAX
|
|
|
|
SCNiPTR
|
|
|
|
|
|
|
|
SCNo8
|
|
|
|
SCNo16
|
|
|
|
SCNo32
|
|
|
|
SCNo64
|
|
|
|
|
|
|
|
SCNoLEAST8
|
|
|
|
SCNoLEAST16
|
|
|
|
SCNoLEAST32
|
|
|
|
SCNoLEAST64
|
|
|
|
|
|
|
|
SCNoFAST8
|
|
|
|
SCNoFAST16
|
|
|
|
SCNoFAST32
|
|
|
|
SCNoFAST64
|
|
|
|
|
|
|
|
SCNoMAX
|
|
|
|
SCNoPTR
|
|
|
|
|
|
|
|
SCNu8
|
|
|
|
SCNu16
|
|
|
|
SCNu32
|
|
|
|
SCNu64
|
|
|
|
|
|
|
|
SCNuLEAST8
|
|
|
|
SCNuLEAST16
|
|
|
|
SCNuLEAST32
|
|
|
|
SCNuLEAST64
|
|
|
|
|
|
|
|
SCNuFAST8
|
|
|
|
SCNuFAST16
|
|
|
|
SCNuFAST32
|
|
|
|
SCNuFAST64
|
|
|
|
|
|
|
|
SCNuMAX
|
|
|
|
SCNuPTR
|
|
|
|
|
|
|
|
SCNx8
|
|
|
|
SCNx16
|
|
|
|
SCNx32
|
|
|
|
SCNx64
|
|
|
|
|
|
|
|
SCNxLEAST8
|
|
|
|
SCNxLEAST16
|
|
|
|
SCNxLEAST32
|
|
|
|
SCNxLEAST64
|
|
|
|
|
|
|
|
SCNxFAST8
|
|
|
|
SCNxFAST16
|
|
|
|
SCNxFAST32
|
|
|
|
SCNxFAST64
|
|
|
|
|
|
|
|
SCNxMAX
|
|
|
|
SCNxPTR
|
|
|
|
|
|
|
|
namespace std
|
|
|
|
{
|
|
|
|
|
|
|
|
Types:
|
|
|
|
|
|
|
|
imaxdiv_t
|
|
|
|
|
|
|
|
intmax_t imaxabs(intmax_t j);
|
|
|
|
imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
|
|
|
|
intmax_t strtoimax(const char* restrict nptr, char** restrict endptr, int base);
|
|
|
|
uintmax_t strtoumax(const char* restrict nptr, char** restrict endptr, int base);
|
|
|
|
intmax_t wcstoimax(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
|
|
|
|
uintmax_t wcstoumax(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
|
|
|
|
|
|
|
|
} // std
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <__config>
|
|
|
|
#include <cstdint>
|
|
|
|
#include <inttypes.h>
|
|
|
|
|
2011-10-18 04:05:10 +08:00
|
|
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
2010-05-12 03:42:16 +08:00
|
|
|
#pragma GCC system_header
|
2011-10-18 04:05:10 +08:00
|
|
|
#endif
|
2010-05-12 03:42:16 +08:00
|
|
|
|
|
|
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
|
|
|
|
[libc++] Use the using_if_exists attribute when provided
As discussed on cfe-dev [1], use the using_if_exists Clang attribute when
the compiler supports it. This makes it easier to port libc++ on top of
new platforms that don't fully support the C Standard library.
Previously, libc++ would fail to build when trying to import a missing
declaration in a <cXXXX> header. With the attribute, the declaration will
simply not be imported into namespace std, and hence it won't be available
for libc++ to use. In many cases, the declarations were *not* actually
required for libc++ to work (they were only surfaced for users to use
them as std::XXXX), so not importing them into namespace std is acceptable.
The same thing could be achieved by conscious usage of `#ifdef` along
with platform detection, however that quickly creates a maintenance
problem as libc++ is ported to new platforms. Furthermore, this problem
is exacerbated when mixed with vendor internal-only platforms, which can
lead to difficulties maintaining a downstream fork of the library.
For the time being, we only use the using_if_exists attribute when it
is supported. At some point in the future, we will start removing #ifdef
paths that are unnecessary when the attribute is supported, and folks
who need those #ifdef paths will be required to use a compiler that
supports the attribute.
[1]: http://lists.llvm.org/pipermail/cfe-dev/2020-June/066038.html
Differential Revision: https://reviews.llvm.org/D90257
2021-06-02 22:41:37 +08:00
|
|
|
using ::imaxdiv_t _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::imaxabs _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::imaxdiv _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::strtoimax _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::strtoumax _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::wcstoimax _LIBCPP_USING_IF_EXISTS;
|
|
|
|
using ::wcstoumax _LIBCPP_USING_IF_EXISTS;
|
2010-05-12 03:42:16 +08:00
|
|
|
|
|
|
|
_LIBCPP_END_NAMESPACE_STD
|
|
|
|
|
2021-04-21 00:03:32 +08:00
|
|
|
#endif // _LIBCPP_CINTTYPES
|