[cfe-dev] Improving diagnostics when moving standard library headers
David Blaikie via cfe-dev
cfe-dev at lists.llvm.org
Fri Aug 10 08:25:23 PDT 2018
Why would the user write the code in that way, though? Wouldn't they want
"has_include optional, include optional, else include
experimental/optional"? to prefer the final/standardized version
On Thu, Aug 9, 2018 at 8:13 AM Louis Dionne via cfe-dev <
cfe-dev at lists.llvm.org> wrote:
> Hi,
>
> In libc++, we moved the <experimental/optional> header to <optional>. To
> guide users when they try to use <experimental/optional>, that file now
> contains:
>
> #error "<experimental/optional> has been removed. Use <optional>
> instead."
>
> The problem is that it traps people using
> __has_include(<experimental/optional>) to detect whether they should be
> using std::experimental::optional or std::optional on the version of the
> standard library they're using. For example:
>
> #if __has_include(<experimental/optional>)
> # include <experimental/optional>
> #else
> # include <optional>
> #endif
>
> This is currently always broken, since <experimental/optional> is always
> provided, but including it is an error.
>
> I believe a better situation would be to remove the header, but somehow
> have a way of providing a better compiler diagnostic than the default one
> when that header is included. The default diagnostic will just say “I can’t
> find this header!”, whereas we really want to say "This header has been
> moved over there". Ideally, this sort of feature would also be usable by
> other libraries, not just the standard library, but I’d welcome just about
> any solution for now.
>
> My question: Do we have a way of achieving what I'm requesting today? If
> not, does anyone have ideas about how to achieve this? My guess is that a
> pragma in the header that's been moved would not work, because that means
> __has_include would have to know way more than it probably does today.
>
> Thanks,
> Louis
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180810/52128f2f/attachment.html>
More information about the cfe-dev
mailing list