[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);