Skip to content

P2338R4 Freestanding Library: Character primitives and the C library #6356

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 75 additions & 75 deletions source/diagnostics.tex
Original file line number Diff line number Diff line change
Expand Up @@ -575,80 +575,80 @@
\begin{codeblock}
#define errno @\seebelow@

#define E2BIG @\seebelow@
#define EACCES @\seebelow@
#define EADDRINUSE @\seebelow@
#define EADDRNOTAVAIL @\seebelow@
#define EAFNOSUPPORT @\seebelow@
#define EAGAIN @\seebelow@
#define EALREADY @\seebelow@
#define EBADF @\seebelow@
#define EBADMSG @\seebelow@
#define EBUSY @\seebelow@
#define ECANCELED @\seebelow@
#define ECHILD @\seebelow@
#define ECONNABORTED @\seebelow@
#define ECONNREFUSED @\seebelow@
#define ECONNRESET @\seebelow@
#define EDEADLK @\seebelow@
#define EDESTADDRREQ @\seebelow@
#define EDOM @\seebelow@
#define EEXIST @\seebelow@
#define EFAULT @\seebelow@
#define EFBIG @\seebelow@
#define EHOSTUNREACH @\seebelow@
#define EIDRM @\seebelow@
#define EILSEQ @\seebelow@
#define EINPROGRESS @\seebelow@
#define EINTR @\seebelow@
#define EINVAL @\seebelow@
#define EIO @\seebelow@
#define EISCONN @\seebelow@
#define EISDIR @\seebelow@
#define ELOOP @\seebelow@
#define EMFILE @\seebelow@
#define EMLINK @\seebelow@
#define EMSGSIZE @\seebelow@
#define ENAMETOOLONG @\seebelow@
#define ENETDOWN @\seebelow@
#define ENETRESET @\seebelow@
#define ENETUNREACH @\seebelow@
#define ENFILE @\seebelow@
#define ENOBUFS @\seebelow@
#define ENODEV @\seebelow@
#define ENOENT @\seebelow@
#define ENOEXEC @\seebelow@
#define ENOLCK @\seebelow@
#define ENOLINK @\seebelow@
#define ENOMEM @\seebelow@
#define ENOMSG @\seebelow@
#define ENOPROTOOPT @\seebelow@
#define ENOSPC @\seebelow@
#define ENOSYS @\seebelow@
#define ENOTCONN @\seebelow@
#define ENOTDIR @\seebelow@
#define ENOTEMPTY @\seebelow@
#define ENOTRECOVERABLE @\seebelow@
#define ENOTSOCK @\seebelow@
#define ENOTSUP @\seebelow@
#define ENOTTY @\seebelow@
#define ENXIO @\seebelow@
#define EOPNOTSUPP @\seebelow@
#define EOVERFLOW @\seebelow@
#define EOWNERDEAD @\seebelow@
#define EPERM @\seebelow@
#define EPIPE @\seebelow@
#define EPROTO @\seebelow@
#define EPROTONOSUPPORT @\seebelow@
#define EPROTOTYPE @\seebelow@
#define ERANGE @\seebelow@
#define EROFS @\seebelow@
#define ESPIPE @\seebelow@
#define ESRCH @\seebelow@
#define ETIMEDOUT @\seebelow@
#define ETXTBSY @\seebelow@
#define EWOULDBLOCK @\seebelow@
#define EXDEV @\seebelow@
#define E2BIG @\seebelow@ // freestanding
#define EACCES @\seebelow@ // freestanding
#define EADDRINUSE @\seebelow@ // freestanding
#define EADDRNOTAVAIL @\seebelow@ // freestanding
#define EAFNOSUPPORT @\seebelow@ // freestanding
#define EAGAIN @\seebelow@ // freestanding
#define EALREADY @\seebelow@ // freestanding
#define EBADF @\seebelow@ // freestanding
#define EBADMSG @\seebelow@ // freestanding
#define EBUSY @\seebelow@ // freestanding
#define ECANCELED @\seebelow@ // freestanding
#define ECHILD @\seebelow@ // freestanding
#define ECONNABORTED @\seebelow@ // freestanding
#define ECONNREFUSED @\seebelow@ // freestanding
#define ECONNRESET @\seebelow@ // freestanding
#define EDEADLK @\seebelow@ // freestanding
#define EDESTADDRREQ @\seebelow@ // freestanding
#define EDOM @\seebelow@ // freestanding
#define EEXIST @\seebelow@ // freestanding
#define EFAULT @\seebelow@ // freestanding
#define EFBIG @\seebelow@ // freestanding
#define EHOSTUNREACH @\seebelow@ // freestanding
#define EIDRM @\seebelow@ // freestanding
#define EILSEQ @\seebelow@ // freestanding
#define EINPROGRESS @\seebelow@ // freestanding
#define EINTR @\seebelow@ // freestanding
#define EINVAL @\seebelow@ // freestanding
#define EIO @\seebelow@ // freestanding
#define EISCONN @\seebelow@ // freestanding
#define EISDIR @\seebelow@ // freestanding
#define ELOOP @\seebelow@ // freestanding
#define EMFILE @\seebelow@ // freestanding
#define EMLINK @\seebelow@ // freestanding
#define EMSGSIZE @\seebelow@ // freestanding
#define ENAMETOOLONG @\seebelow@ // freestanding
#define ENETDOWN @\seebelow@ // freestanding
#define ENETRESET @\seebelow@ // freestanding
#define ENETUNREACH @\seebelow@ // freestanding
#define ENFILE @\seebelow@ // freestanding
#define ENOBUFS @\seebelow@ // freestanding
#define ENODEV @\seebelow@ // freestanding
#define ENOENT @\seebelow@ // freestanding
#define ENOEXEC @\seebelow@ // freestanding
#define ENOLCK @\seebelow@ // freestanding
#define ENOLINK @\seebelow@ // freestanding
#define ENOMEM @\seebelow@ // freestanding
#define ENOMSG @\seebelow@ // freestanding
#define ENOPROTOOPT @\seebelow@ // freestanding
#define ENOSPC @\seebelow@ // freestanding
#define ENOSYS @\seebelow@ // freestanding
#define ENOTCONN @\seebelow@ // freestanding
#define ENOTDIR @\seebelow@ // freestanding
#define ENOTEMPTY @\seebelow@ // freestanding
#define ENOTRECOVERABLE @\seebelow@ // freestanding
#define ENOTSOCK @\seebelow@ // freestanding
#define ENOTSUP @\seebelow@ // freestanding
#define ENOTTY @\seebelow@ // freestanding
#define ENXIO @\seebelow@ // freestanding
#define EOPNOTSUPP @\seebelow@ // freestanding
#define EOVERFLOW @\seebelow@ // freestanding
#define EOWNERDEAD @\seebelow@ // freestanding
#define EPERM @\seebelow@ // freestanding
#define EPIPE @\seebelow@ // freestanding
#define EPROTO @\seebelow@ // freestanding
#define EPROTONOSUPPORT @\seebelow@ // freestanding
#define EPROTOTYPE @\seebelow@ // freestanding
#define ERANGE @\seebelow@ // freestanding
#define EROFS @\seebelow@ // freestanding
#define ESPIPE @\seebelow@ // freestanding
#define ESRCH @\seebelow@ // freestanding
#define ETIMEDOUT @\seebelow@ // freestanding
#define ETXTBSY @\seebelow@ // freestanding
#define EWOULDBLOCK @\seebelow@ // freestanding
#define EXDEV @\seebelow@ // freestanding
\end{codeblock}

\pnum
Expand Down Expand Up @@ -701,7 +701,7 @@
template<class T>
struct is_error_condition_enum : public false_type {};

enum class errc {
enum class errc { // freestanding
address_family_not_supported, // \tcode{EAFNOSUPPORT}
address_in_use, // \tcode{EADDRINUSE}
address_not_available, // \tcode{EADDRNOTAVAIL}
Expand Down
35 changes: 28 additions & 7 deletions source/lib-intro.tex
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,20 @@
\end{codeblock}
\end{example}

\pnum
Function declarations and function template declarations
followed by a comment that include \textit{freestanding-deleted} are
\defnadjx{freestanding deleted}{functions}{function}.
On freestanding implementations,
it is \impldef{whether a freestanding deleted function is a freestanding item or a deleted function}
whether each function definition introduced by a freestanding deleted function
is a freestanding item or a deleted function\iref{dcl.fct.def.delete}.
\begin{example}
\begin{codeblock}
double abs(double j); // freestanding-deleted
\end{codeblock}
\end{example}

\rSec1[requirements]{Library-wide requirements}

\rSec2[requirements.general]{General}
Expand Down Expand Up @@ -1441,10 +1455,11 @@

\begin{libsumtab}{\Cpp{} headers for freestanding implementations}{headers.cpp.fs}
\ref{support.types} & Common definitions & \tcode{<cstddef>} \\ \rowsep
\ref{cstdlib.syn} & C standard library & \tcode{<cstdlib>} \\ \rowsep
\ref{support.limits} & Implementation properties &
\tcode{<cfloat>}, \tcode{<climits>}, \tcode{<limits>}, \tcode{<version>} \\ \rowsep
\tcode{<cfloat>}, \tcode{<climits>}, \tcode{<limits>}, \\
& & \tcode{<version>} \\ \rowsep
\ref{cstdint.syn} & Integer types & \tcode{<cstdint>} \\ \rowsep
\ref{support.start.term} & Start and termination & \tcode{<cstdlib>} \\ \rowsep
\ref{support.dynamic} & Dynamic memory management & \tcode{<new>} \\ \rowsep
\ref{support.rtti} & Type identification & \tcode{<typeinfo>} \\ \rowsep
\ref{support.srcloc} & Source location & \tcode{<source_location>} \\ \rowsep
Expand All @@ -1454,16 +1469,22 @@
\ref{support.coroutine} & Coroutines support & \tcode{<coroutine>} \\ \rowsep
\ref{support.runtime} & Other runtime support & \tcode{<cstdarg>} \\ \rowsep
\ref{concepts} & Concepts library & \tcode{<concepts>} \\ \rowsep
\ref{errno} & Error numbers & \tcode{<cerrno>} \\ \rowsep
\ref{syserr} & System error support & \tcode{<system_error>} \\ \rowsep
\ref{memory} & Memory & \tcode{<memory>} \\ \rowsep
\ref{type.traits} & Type traits & \tcode{<type_traits>} \\ \rowsep
\ref{bit} & Bit manipulation & \tcode{<bit>} \\ \rowsep
\ref{atomics} & Atomics & \tcode{<atomic>} \\ \rowsep
\ref{ratio} & Compile-time rational arithmetic & \tcode{<ratio>} \\ \rowsep
\ref{utility} & Utility components & \tcode{<utility>} \\ \rowsep
\ref{tuple} & Tuples & \tcode{<tuple>} \\ \rowsep
\ref{memory} & Memory & \tcode{<memory>} \\ \rowsep
\ref{function.objects} & Function objects & \tcode{<functional>} \\ \rowsep
\ref{ratio} & Compile-time rational arithmetic & \tcode{<ratio>} \\ \rowsep
\ref{charconv} & Primitive numeric conversions & \tcode{<charconv>} \\ \rowsep
\ref{bit} & Bit manipulation & \tcode{<bit>} \\ \rowsep
\ref{string.classes} & String classes & \tcode{<string>} \\ \rowsep
\ref{c.strings} & Null-terminated sequence utilities & \tcode{<cstring>}, \tcode{<cwchar>} \\ \rowsep
\ref{iterators} & Iterators library & \tcode{<iterator>} \\ \rowsep
\ref{ranges} & Ranges library & \tcode{<ranges>} \\
\ref{ranges} & Ranges library & \tcode{<ranges>} \\ \rowsep
\ref{c.math} & Mathematical functions for floating-point types & \tcode{<cmath>} \\ \rowsep
\ref{atomics} & Atomics & \tcode{<atomic>} \\ \rowsep
\end{libsumtab}

\pnum
Expand Down
8 changes: 4 additions & 4 deletions source/numerics.tex
Original file line number Diff line number Diff line change
Expand Up @@ -9072,10 +9072,10 @@
long double cbrtl(long double x);

// \ref{c.math.abs}, absolute values
constexpr int abs(int j);
constexpr long int abs(long int j);
constexpr long long int abs(long long int j);
constexpr @\placeholder{floating-point-type}@ abs(@\placeholder{floating-point-type}@ j);
constexpr int abs(int j); // freestanding
constexpr long int abs(long int j); // freestanding
constexpr long long int abs(long long int j); // freestanding
constexpr @\placeholder{floating-point-type}@ abs(@\placeholder{floating-point-type}@ j); // freestanding-deleted

constexpr @\placeholder{floating-point-type}@ fabs(@\placeholder{floating-point-type}@ x);
constexpr float fabsf(float x);
Expand Down
Loading