improving C++ libc headers
- Reply: Enji Cooper : "Re: improving C++ libc headers"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 30 Jan 2024 13:30:54 UTC
hi list, i am considering working up a patch to improve C++ libc headers in FreeBSD. the problem with the current headers (which come from clang/libc++) is that this code compiles: ------ #include <cstdlib> auto main() -> int { exit(0); } ------ this should be a compile-time error, because <cstdio> does not declare ::exit[0]. however, it works because <cstdlib> is implemented like this: ------ #include <stdlib.h> // exposes ::exit() namespace std { using ::exit; // ... } ------ i would like to replace this with an implementation that does this instead: ------ namespace std { extern "C" void exit(int); // ... } ------ i have done a very quick proof of concept for this and it does work; there are some more complicated edge cases, but nothing that can't be dealt with from what i can see. but before i put any amount of significant effort into this, i'd like to check if this is something that is likely to be merged. to address some potential objections: - i don't believe this can be handled upstream in libc++, because some of these headers require knowledge of the implementation - <cstdio> needs to know about 'struct __sFILE', for example. - "import std" should solve this properly, but there are a lot of implementation issues with this and it's not clear if/when it will ever be supported; in the mean time, the existing standard headers should behave correctly. [0] https://www.eel.is/c++draft/cstdlib.syn#header:%3Ccstdlib%3E [1] https://cgit.freebsd.org/src/tree/contrib/llvm-project/libcxx/include/cstdlib