Skip to content

Commit b2cc526

Browse files
authored
Merge 2023-06 LWG Motion 12
P2338R4 Freestanding Library: Character primitives and the C library
2 parents 7d6f2cb + 9eaf064 commit b2cc526

File tree

6 files changed

+216
-183
lines changed

6 files changed

+216
-183
lines changed

source/diagnostics.tex

Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -575,80 +575,80 @@
575575
\begin{codeblock}
576576
#define errno @\seebelow@
577577

578-
#define E2BIG @\seebelow@
579-
#define EACCES @\seebelow@
580-
#define EADDRINUSE @\seebelow@
581-
#define EADDRNOTAVAIL @\seebelow@
582-
#define EAFNOSUPPORT @\seebelow@
583-
#define EAGAIN @\seebelow@
584-
#define EALREADY @\seebelow@
585-
#define EBADF @\seebelow@
586-
#define EBADMSG @\seebelow@
587-
#define EBUSY @\seebelow@
588-
#define ECANCELED @\seebelow@
589-
#define ECHILD @\seebelow@
590-
#define ECONNABORTED @\seebelow@
591-
#define ECONNREFUSED @\seebelow@
592-
#define ECONNRESET @\seebelow@
593-
#define EDEADLK @\seebelow@
594-
#define EDESTADDRREQ @\seebelow@
595-
#define EDOM @\seebelow@
596-
#define EEXIST @\seebelow@
597-
#define EFAULT @\seebelow@
598-
#define EFBIG @\seebelow@
599-
#define EHOSTUNREACH @\seebelow@
600-
#define EIDRM @\seebelow@
601-
#define EILSEQ @\seebelow@
602-
#define EINPROGRESS @\seebelow@
603-
#define EINTR @\seebelow@
604-
#define EINVAL @\seebelow@
605-
#define EIO @\seebelow@
606-
#define EISCONN @\seebelow@
607-
#define EISDIR @\seebelow@
608-
#define ELOOP @\seebelow@
609-
#define EMFILE @\seebelow@
610-
#define EMLINK @\seebelow@
611-
#define EMSGSIZE @\seebelow@
612-
#define ENAMETOOLONG @\seebelow@
613-
#define ENETDOWN @\seebelow@
614-
#define ENETRESET @\seebelow@
615-
#define ENETUNREACH @\seebelow@
616-
#define ENFILE @\seebelow@
617-
#define ENOBUFS @\seebelow@
618-
#define ENODEV @\seebelow@
619-
#define ENOENT @\seebelow@
620-
#define ENOEXEC @\seebelow@
621-
#define ENOLCK @\seebelow@
622-
#define ENOLINK @\seebelow@
623-
#define ENOMEM @\seebelow@
624-
#define ENOMSG @\seebelow@
625-
#define ENOPROTOOPT @\seebelow@
626-
#define ENOSPC @\seebelow@
627-
#define ENOSYS @\seebelow@
628-
#define ENOTCONN @\seebelow@
629-
#define ENOTDIR @\seebelow@
630-
#define ENOTEMPTY @\seebelow@
631-
#define ENOTRECOVERABLE @\seebelow@
632-
#define ENOTSOCK @\seebelow@
633-
#define ENOTSUP @\seebelow@
634-
#define ENOTTY @\seebelow@
635-
#define ENXIO @\seebelow@
636-
#define EOPNOTSUPP @\seebelow@
637-
#define EOVERFLOW @\seebelow@
638-
#define EOWNERDEAD @\seebelow@
639-
#define EPERM @\seebelow@
640-
#define EPIPE @\seebelow@
641-
#define EPROTO @\seebelow@
642-
#define EPROTONOSUPPORT @\seebelow@
643-
#define EPROTOTYPE @\seebelow@
644-
#define ERANGE @\seebelow@
645-
#define EROFS @\seebelow@
646-
#define ESPIPE @\seebelow@
647-
#define ESRCH @\seebelow@
648-
#define ETIMEDOUT @\seebelow@
649-
#define ETXTBSY @\seebelow@
650-
#define EWOULDBLOCK @\seebelow@
651-
#define EXDEV @\seebelow@
578+
#define E2BIG @\seebelow@ // freestanding
579+
#define EACCES @\seebelow@ // freestanding
580+
#define EADDRINUSE @\seebelow@ // freestanding
581+
#define EADDRNOTAVAIL @\seebelow@ // freestanding
582+
#define EAFNOSUPPORT @\seebelow@ // freestanding
583+
#define EAGAIN @\seebelow@ // freestanding
584+
#define EALREADY @\seebelow@ // freestanding
585+
#define EBADF @\seebelow@ // freestanding
586+
#define EBADMSG @\seebelow@ // freestanding
587+
#define EBUSY @\seebelow@ // freestanding
588+
#define ECANCELED @\seebelow@ // freestanding
589+
#define ECHILD @\seebelow@ // freestanding
590+
#define ECONNABORTED @\seebelow@ // freestanding
591+
#define ECONNREFUSED @\seebelow@ // freestanding
592+
#define ECONNRESET @\seebelow@ // freestanding
593+
#define EDEADLK @\seebelow@ // freestanding
594+
#define EDESTADDRREQ @\seebelow@ // freestanding
595+
#define EDOM @\seebelow@ // freestanding
596+
#define EEXIST @\seebelow@ // freestanding
597+
#define EFAULT @\seebelow@ // freestanding
598+
#define EFBIG @\seebelow@ // freestanding
599+
#define EHOSTUNREACH @\seebelow@ // freestanding
600+
#define EIDRM @\seebelow@ // freestanding
601+
#define EILSEQ @\seebelow@ // freestanding
602+
#define EINPROGRESS @\seebelow@ // freestanding
603+
#define EINTR @\seebelow@ // freestanding
604+
#define EINVAL @\seebelow@ // freestanding
605+
#define EIO @\seebelow@ // freestanding
606+
#define EISCONN @\seebelow@ // freestanding
607+
#define EISDIR @\seebelow@ // freestanding
608+
#define ELOOP @\seebelow@ // freestanding
609+
#define EMFILE @\seebelow@ // freestanding
610+
#define EMLINK @\seebelow@ // freestanding
611+
#define EMSGSIZE @\seebelow@ // freestanding
612+
#define ENAMETOOLONG @\seebelow@ // freestanding
613+
#define ENETDOWN @\seebelow@ // freestanding
614+
#define ENETRESET @\seebelow@ // freestanding
615+
#define ENETUNREACH @\seebelow@ // freestanding
616+
#define ENFILE @\seebelow@ // freestanding
617+
#define ENOBUFS @\seebelow@ // freestanding
618+
#define ENODEV @\seebelow@ // freestanding
619+
#define ENOENT @\seebelow@ // freestanding
620+
#define ENOEXEC @\seebelow@ // freestanding
621+
#define ENOLCK @\seebelow@ // freestanding
622+
#define ENOLINK @\seebelow@ // freestanding
623+
#define ENOMEM @\seebelow@ // freestanding
624+
#define ENOMSG @\seebelow@ // freestanding
625+
#define ENOPROTOOPT @\seebelow@ // freestanding
626+
#define ENOSPC @\seebelow@ // freestanding
627+
#define ENOSYS @\seebelow@ // freestanding
628+
#define ENOTCONN @\seebelow@ // freestanding
629+
#define ENOTDIR @\seebelow@ // freestanding
630+
#define ENOTEMPTY @\seebelow@ // freestanding
631+
#define ENOTRECOVERABLE @\seebelow@ // freestanding
632+
#define ENOTSOCK @\seebelow@ // freestanding
633+
#define ENOTSUP @\seebelow@ // freestanding
634+
#define ENOTTY @\seebelow@ // freestanding
635+
#define ENXIO @\seebelow@ // freestanding
636+
#define EOPNOTSUPP @\seebelow@ // freestanding
637+
#define EOVERFLOW @\seebelow@ // freestanding
638+
#define EOWNERDEAD @\seebelow@ // freestanding
639+
#define EPERM @\seebelow@ // freestanding
640+
#define EPIPE @\seebelow@ // freestanding
641+
#define EPROTO @\seebelow@ // freestanding
642+
#define EPROTONOSUPPORT @\seebelow@ // freestanding
643+
#define EPROTOTYPE @\seebelow@ // freestanding
644+
#define ERANGE @\seebelow@ // freestanding
645+
#define EROFS @\seebelow@ // freestanding
646+
#define ESPIPE @\seebelow@ // freestanding
647+
#define ESRCH @\seebelow@ // freestanding
648+
#define ETIMEDOUT @\seebelow@ // freestanding
649+
#define ETXTBSY @\seebelow@ // freestanding
650+
#define EWOULDBLOCK @\seebelow@ // freestanding
651+
#define EXDEV @\seebelow@ // freestanding
652652
\end{codeblock}
653653

654654
\pnum
@@ -701,7 +701,7 @@
701701
template<class T>
702702
struct is_error_condition_enum : public false_type {};
703703

704-
enum class errc {
704+
enum class errc { // freestanding
705705
address_family_not_supported, // \tcode{EAFNOSUPPORT}
706706
address_in_use, // \tcode{EADDRINUSE}
707707
address_not_available, // \tcode{EADDRNOTAVAIL}

source/lib-intro.tex

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,20 @@
948948
\end{codeblock}
949949
\end{example}
950950

951+
\pnum
952+
Function declarations and function template declarations
953+
followed by a comment that include \textit{freestanding-deleted} are
954+
\defnadjx{freestanding deleted}{functions}{function}.
955+
On freestanding implementations,
956+
it is \impldef{whether a freestanding deleted function is a freestanding item or a deleted function}
957+
whether each function definition introduced by a freestanding deleted function
958+
is a freestanding item or a deleted function\iref{dcl.fct.def.delete}.
959+
\begin{example}
960+
\begin{codeblock}
961+
double abs(double j); // freestanding-deleted
962+
\end{codeblock}
963+
\end{example}
964+
951965
\rSec1[requirements]{Library-wide requirements}
952966

953967
\rSec2[requirements.general]{General}
@@ -1441,10 +1455,11 @@
14411455

14421456
\begin{libsumtab}{\Cpp{} headers for freestanding implementations}{headers.cpp.fs}
14431457
\ref{support.types} & Common definitions & \tcode{<cstddef>} \\ \rowsep
1458+
\ref{cstdlib.syn} & C standard library & \tcode{<cstdlib>} \\ \rowsep
14441459
\ref{support.limits} & Implementation properties &
1445-
\tcode{<cfloat>}, \tcode{<climits>}, \tcode{<limits>}, \tcode{<version>} \\ \rowsep
1460+
\tcode{<cfloat>}, \tcode{<climits>}, \tcode{<limits>}, \\
1461+
& & \tcode{<version>} \\ \rowsep
14461462
\ref{cstdint.syn} & Integer types & \tcode{<cstdint>} \\ \rowsep
1447-
\ref{support.start.term} & Start and termination & \tcode{<cstdlib>} \\ \rowsep
14481463
\ref{support.dynamic} & Dynamic memory management & \tcode{<new>} \\ \rowsep
14491464
\ref{support.rtti} & Type identification & \tcode{<typeinfo>} \\ \rowsep
14501465
\ref{support.srcloc} & Source location & \tcode{<source_location>} \\ \rowsep
@@ -1454,16 +1469,22 @@
14541469
\ref{support.coroutine} & Coroutines support & \tcode{<coroutine>} \\ \rowsep
14551470
\ref{support.runtime} & Other runtime support & \tcode{<cstdarg>} \\ \rowsep
14561471
\ref{concepts} & Concepts library & \tcode{<concepts>} \\ \rowsep
1472+
\ref{errno} & Error numbers & \tcode{<cerrno>} \\ \rowsep
1473+
\ref{syserr} & System error support & \tcode{<system_error>} \\ \rowsep
1474+
\ref{memory} & Memory & \tcode{<memory>} \\ \rowsep
14571475
\ref{type.traits} & Type traits & \tcode{<type_traits>} \\ \rowsep
1458-
\ref{bit} & Bit manipulation & \tcode{<bit>} \\ \rowsep
1459-
\ref{atomics} & Atomics & \tcode{<atomic>} \\ \rowsep
1476+
\ref{ratio} & Compile-time rational arithmetic & \tcode{<ratio>} \\ \rowsep
14601477
\ref{utility} & Utility components & \tcode{<utility>} \\ \rowsep
14611478
\ref{tuple} & Tuples & \tcode{<tuple>} \\ \rowsep
1462-
\ref{memory} & Memory & \tcode{<memory>} \\ \rowsep
14631479
\ref{function.objects} & Function objects & \tcode{<functional>} \\ \rowsep
1464-
\ref{ratio} & Compile-time rational arithmetic & \tcode{<ratio>} \\ \rowsep
1480+
\ref{charconv} & Primitive numeric conversions & \tcode{<charconv>} \\ \rowsep
1481+
\ref{bit} & Bit manipulation & \tcode{<bit>} \\ \rowsep
1482+
\ref{string.classes} & String classes & \tcode{<string>} \\ \rowsep
1483+
\ref{c.strings} & Null-terminated sequence utilities & \tcode{<cstring>}, \tcode{<cwchar>} \\ \rowsep
14651484
\ref{iterators} & Iterators library & \tcode{<iterator>} \\ \rowsep
1466-
\ref{ranges} & Ranges library & \tcode{<ranges>} \\
1485+
\ref{ranges} & Ranges library & \tcode{<ranges>} \\ \rowsep
1486+
\ref{c.math} & Mathematical functions for floating-point types & \tcode{<cmath>} \\ \rowsep
1487+
\ref{atomics} & Atomics & \tcode{<atomic>} \\ \rowsep
14671488
\end{libsumtab}
14681489

14691490
\pnum

source/numerics.tex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9072,10 +9072,10 @@
90729072
long double cbrtl(long double x);
90739073

90749074
// \ref{c.math.abs}, absolute values
9075-
constexpr int abs(int j);
9076-
constexpr long int abs(long int j);
9077-
constexpr long long int abs(long long int j);
9078-
constexpr @\placeholder{floating-point-type}@ abs(@\placeholder{floating-point-type}@ j);
9075+
constexpr int abs(int j); // freestanding
9076+
constexpr long int abs(long int j); // freestanding
9077+
constexpr long long int abs(long long int j); // freestanding
9078+
constexpr @\placeholder{floating-point-type}@ abs(@\placeholder{floating-point-type}@ j); // freestanding-deleted
90799079

90809080
constexpr @\placeholder{floating-point-type}@ fabs(@\placeholder{floating-point-type}@ x);
90819081
constexpr float fabsf(float x);

0 commit comments

Comments
 (0)