[support.types] (original) (raw)
17 Language support library [support]
17.2 Common definitions [support.types]
17.2.1 Header synopsis [cstddef.syn]
namespace std { using ptrdiff_t = see below; using size_t = see below; using max_align_t = see below; using nullptr_t = decltype(nullptr);
enum class byte : unsigned char {};
template constexpr byte& operator<<=(byte& b, IntType shift) noexcept; template constexpr byte operator<<(byte b, IntType shift) noexcept; template constexpr byte& operator>>=(byte& b, IntType shift) noexcept; template constexpr byte operator>>(byte b, IntType shift) noexcept; constexpr byte& operator|=(byte& l, byte r) noexcept; constexpr byte operator|(byte l, byte r) noexcept; constexpr byte& operator&=(byte& l, byte r) noexcept; constexpr byte operator&(byte l, byte r) noexcept; constexpr byte& operator^=(byte& l, byte r) noexcept; constexpr byte operator^(byte l, byte r) noexcept; constexpr byte operator~(byte b) noexcept; template constexpr IntType to_integer(byte b) noexcept; }
#define NULL see below #define offsetof(P, D) see below
The contents and meaning of the header <cstddef> are the same as the C standard library header <stddef.h>, except that it does not declare the type wchar_t, that it also declares the type byteand its associated operations ([support.types.byteops]), and as noted in[support.types.nullptr] and[support.types.layout].
See also: ISO C 7.19
17.2.2 Header synopsis [cstdlib.syn]
namespace std { using size_t = see below; using div_t = see below; using ldiv_t = see below; using lldiv_t = see below; }
#define NULL see below #define EXIT_FAILURE see below #define EXIT_SUCCESS see below #define RAND_MAX see below #define MB_CUR_MAX see below
namespace std {
extern "C" using c-atexit-handler = void();
extern "C++" using atexit-handler = void();
extern "C" using c-compare-pred = int(const void*, const void*);
extern "C++" using compare-pred = int(const void*, const void*);
[[noreturn]] void abort() noexcept; int atexit(c-atexit-handler* func) noexcept; int atexit(atexit-handler* func) noexcept; int at_quick_exit(c-atexit-handler* func) noexcept; int at_quick_exit(atexit-handler* func) noexcept; [[noreturn]] void exit(int status); [[noreturn]] void _Exit(int status) noexcept; [[noreturn]] void quick_exit(int status) noexcept;
char* getenv(const char* name); int system(const char* string);
void* aligned_alloc(size_t alignment, size_t size); void* calloc(size_t nmemb, size_t size); void free(void* ptr); void* malloc(size_t size); void* realloc(void* ptr, size_t size);
double atof(const char* nptr); int atoi(const char* nptr); long int atol(const char* nptr); long long int atoll(const char* nptr); double strtod(const char* nptr, char** endptr); float strtof(const char* nptr, char** endptr); long double strtold(const char* nptr, char** endptr); long int strtol(const char* nptr, char** endptr, int base); long long int strtoll(const char* nptr, char** endptr, int base); unsigned long int strtoul(const char* nptr, char** endptr, int base); unsigned long long int strtoull(const char* nptr, char** endptr, int base);
int mblen(const char* s, size_t n); int mbtowc(wchar_t* pwc, const char* s, size_t n); int wctomb(char* s, wchar_t wchar); size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n); size_t wcstombs(char* s, const wchar_t* pwcs, size_t n);
void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, c-compare-pred* compar); void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, compare-pred* compar); void qsort(void* base, size_t nmemb, size_t size, c-compare-pred* compar); void qsort(void* base, size_t nmemb, size_t size, compare-pred* compar);
int rand(); void srand(unsigned int seed);
int abs(int j); long int abs(long int j); long long int abs(long long int j); float abs(float j); double abs(double j); long double abs(long double j);
long int labs(long int j); long long int llabs(long long int j);
div_t div(int numer, int denom);
ldiv_t div(long int numer, long int denom);
lldiv_t div(long long int numer, long long int denom);
ldiv_t ldiv(long int numer, long int denom);
lldiv_t lldiv(long long int numer, long long int denom);
}
[ Note
:
Several functions have additional overloads in this document, but they have the same behavior as in the C standard library.
— end note
]
See also: ISO C 7.22
17.2.3 Null pointers [support.types.nullptr]
The type nullptr_t is a synonym for the type of a nullptr expression, and it has the characteristics described in [basic.fundamental] and [conv.ptr].
[ Note
:
Although nullptr's address cannot be taken, the address of anothernullptr_t object that is an lvalue can be taken.
— end note
]
The macroNULLis an implementation-defined null pointer constant.182
See also: ISO C 7.19
17.2.4 Sizes, alignments, and offsets [support.types.layout]
The macrooffsetof(type, member-designator)has the same semantics as the corresponding macro in the C standard library header <stddef.h>, but accepts a restricted set of typearguments in this document.
Use of the offsetof macro with a typeother than a standard-layout class ([class.prop]) is conditionally-supported.183
The expression offsetof(type, member-designator)is never type-dependent and it isvalue-dependent if and only if type is dependent.
The result of applying the offsetof macro to a static data member or a function member is undefined.
No operation invoked by the offsetof macro shall throw an exception andnoexcept(offsetof(type, member-designator)) shall be true.
The type ptrdiff_t is animplementation-defined signed integer type that can hold the difference of two subscripts in an array object, as described in [expr.add].
The type size_t is animplementation-defined unsigned integer type that is large enough to contain the size in bytes of any object ([expr.sizeof]).
[ Note
:
It is recommended that implementations choose types for ptrdiff_t and size_twhose integer conversion ranks are no greater than that ofsigned long int unless a larger size is necessary to contain all the possible values.
— end note
]
The typemax_align_t is a trivial standard-layout type whose alignment requirement is at least as great as that of every scalar type, and whose alignment requirement is supported in every context ([basic.align]).
See also: ISO C 7.19
17.2.5 byte type operations [support.types.byteops]
template<class IntType> constexpr byte& operator<<=(byte& b, IntType shift) noexcept;
Constraints: is_integral_v<IntType> is true.
Effects:Equivalent to:return b = b << shift;
template<class IntType> constexpr byte operator<<(byte b, IntType shift) noexcept;
Constraints: is_integral_v<IntType> is true.
Effects:Equivalent to:
return static_cast(static_cast(b) << shift);
template<class IntType> constexpr byte& operator>>=(byte& b, IntType shift) noexcept;
Constraints: is_integral_v<IntType> is true.
Effects:Equivalent to:return b = b >> shift;
template<class IntType> constexpr byte operator>>(byte b, IntType shift) noexcept;
Constraints: is_integral_v<IntType> is true.
Effects:Equivalent to:
return static_cast(static_cast(b) >> shift);
constexpr byte& operator|=(byte& l, byte r) noexcept;
Effects:Equivalent to: return l = l | r;
constexpr byte operator|(byte l, byte r) noexcept;
Effects:Equivalent to:
return static_cast(static_cast(l) | static_cast(r));
constexpr byte& operator&=(byte& l, byte r) noexcept;
Effects:Equivalent to: return l = l & r;
constexpr byte operator&(byte l, byte r) noexcept;
Effects:Equivalent to:
return static_cast(static_cast(l) & static_cast(r));
constexpr byte& operator^=(byte& l, byte r) noexcept;
Effects:Equivalent to: return l = l ^ r;
constexpr byte operator^(byte l, byte r) noexcept;
Effects:Equivalent to:
return static_cast(static_cast(l) ^ static_cast(r));
constexpr byte operator~(byte b) noexcept;
Effects:Equivalent to:
return static_cast(~static_cast(b));
template<class IntType> constexpr IntType to_integer(byte b) noexcept;
Constraints: is_integral_v<IntType> is true.
Effects:Equivalent to: return static_cast<IntType>(b);