[PATCH] D105439: [clang] protects users from relying on libc++ detail headers
Christopher Di Bella via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 5 10:38:00 PDT 2021
cjdb added a comment.
In D105439#2858291 <https://reviews.llvm.org/D105439#2858291>, @Quuxplusone wrote:
> Step 1 should be to find out if this is even a problem at all. For example, try using one of these tools to compile a C++ program against GNU libstdc++, or against a library like range-v3, both of which already uses many small detail headers. Is the tool's output confusing or incorrect for //those// libraries? Only if it's actually a problem, should Clang itself try to solve problems with those tool/library combos by adding special-case code into the Clang codebase.
I didn't say that any tool's output is "confusing or incorrect". I said that tooling will accidentally include libc++'s detail headers, which is undesirable, as it is non-portable. You've also disregarded my statement about Hyrum's law, which points out that users will come to rely on `<__algorithm/find.h>` with or **without** tooling. Tooling only accelerates the problem of including detail headers.
In D105439#2858295 <https://reviews.llvm.org/D105439#2858295>, @lebedev.ri wrote:
> Why not solve this in the headers themselves?
> Just `#error` in implementation header if some macro isn't defined, and define said macro in parent header before including implementation detail headers?
Do you mean like this?
#define _LIBCXX_DETAIL_HEADERS_ALLOWED
#include <__algorithm/find.h>
...
#undef _LIBCXX_DETAIL_HEADERS_ALLOWED
That would cover headers too (very good), but I'm not sure how it will play with Clang's modules.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D105439/new/
https://reviews.llvm.org/D105439
More information about the cfe-commits
mailing list