Date: Wed, 10 Jul 2019 14:58:37 -0700
Hrm.
My current understanding is that if you import <x>, then it is an
importable header (otherwise your program is ill-formed), and thus
because it is an importable header, any #include <x>s must be
translated to imports.
Include translation is not mandatory; the set of importable headers is
implementation defined. However, an #include of an importable header
must be translated to an import; but implementations have control,
because they define what an importable header is.
I think perhaps we were all defining "include translation is
mandatory" differently. It's mandatory for importable headers, we can
all agree to that, yes?
On Wed, Jul 10, 2019 at 2:51 PM Gabriel Dos Reis <gdr_at_[hidden]> wrote:
>
>
>
> | -----Original Message-----
> | From: Bryce Adelstein Lelbach aka wash <brycelelbach_at_[hidden]>
> | Sent: Wednesday, July 10, 2019 2:37 PM
> | To: Gabriel Dos Reis <gdr_at_[hidden]>
> | Cc: Tom Honermann <tom_at_[hidden]>; modules_at_[hidden];
> | sg15_at_[hidden]
> | Subject: Re: [isocpp-modules] [SG15] Determining identity like #pragma once
> |
> | On Wed, Jul 10, 2019 at 11:02 AM Gabriel Dos Reis <gdr_at_[hidden]>
> | wrote:
> | >
> | > You are implying that the include translation is mandatory. Is that your
> | argument?
> |
> | It is my belief that include translation is mandatory.
> |
> | "If the header identified by the header-name denotes an importable
> | header ([module.import]), the preprocessing directive is instead
> | replaced by the preprocessing-tokens: import header-name ;"
> | https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Feel.is
> | %2Fc%2B%2Bdraft%2Fcpp.include%237&data=02%7C01%7Cgdr%40mic
> | rosoft.com%7C57adb75b608743ebf6e208d7057ed5d4%7C72f988bf86f141af
> | 91ab2d7cd011db47%7C1%7C0%7C636983914618863287&sdata=JsvGf
> | 0RfvcjOSMF6q%2FfsW60hhKx5TI%2F1K42M8PdRbOU%3D&reserved=0
> |
> | To me, that reads as "including an importable header must be
> | translated to an import".
> |
> | Was that the original design intent?
>
> The original intent, as I understood it, was to *permit* include translation.
>
> A mandatory include translation is practically unworkable for the MSVC audience. I wouldn't be surprised at all if that is the case of other compilers too.
>
> A permission, as opposed to a requirement, would allow adoption of header import as better and principled replacement of PCH. Otherwise, it would create more problems than it solves.
>
> -- Gaby
>
My current understanding is that if you import <x>, then it is an
importable header (otherwise your program is ill-formed), and thus
because it is an importable header, any #include <x>s must be
translated to imports.
Include translation is not mandatory; the set of importable headers is
implementation defined. However, an #include of an importable header
must be translated to an import; but implementations have control,
because they define what an importable header is.
I think perhaps we were all defining "include translation is
mandatory" differently. It's mandatory for importable headers, we can
all agree to that, yes?
On Wed, Jul 10, 2019 at 2:51 PM Gabriel Dos Reis <gdr_at_[hidden]> wrote:
>
>
>
> | -----Original Message-----
> | From: Bryce Adelstein Lelbach aka wash <brycelelbach_at_[hidden]>
> | Sent: Wednesday, July 10, 2019 2:37 PM
> | To: Gabriel Dos Reis <gdr_at_[hidden]>
> | Cc: Tom Honermann <tom_at_[hidden]>; modules_at_[hidden];
> | sg15_at_[hidden]
> | Subject: Re: [isocpp-modules] [SG15] Determining identity like #pragma once
> |
> | On Wed, Jul 10, 2019 at 11:02 AM Gabriel Dos Reis <gdr_at_[hidden]>
> | wrote:
> | >
> | > You are implying that the include translation is mandatory. Is that your
> | argument?
> |
> | It is my belief that include translation is mandatory.
> |
> | "If the header identified by the header-name denotes an importable
> | header ([module.import]), the preprocessing directive is instead
> | replaced by the preprocessing-tokens: import header-name ;"
> | https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Feel.is
> | %2Fc%2B%2Bdraft%2Fcpp.include%237&data=02%7C01%7Cgdr%40mic
> | rosoft.com%7C57adb75b608743ebf6e208d7057ed5d4%7C72f988bf86f141af
> | 91ab2d7cd011db47%7C1%7C0%7C636983914618863287&sdata=JsvGf
> | 0RfvcjOSMF6q%2FfsW60hhKx5TI%2F1K42M8PdRbOU%3D&reserved=0
> |
> | To me, that reads as "including an importable header must be
> | translated to an import".
> |
> | Was that the original design intent?
>
> The original intent, as I understood it, was to *permit* include translation.
>
> A mandatory include translation is practically unworkable for the MSVC audience. I wouldn't be surprised at all if that is the case of other compilers too.
>
> A permission, as opposed to a requirement, would allow adoption of header import as better and principled replacement of PCH. Otherwise, it would create more problems than it solves.
>
> -- Gaby
>
-- Bryce Adelstein Lelbach aka wash CUDA Core C++ Libraries Lead @ NVIDIA ISO C++ Library Evolution Incubator Chair ISO C++ Tooling Chair CppCon and C++Now Program Chair CUDA Convert and Reformed AVX Junkie Sleep is for the weak --
Received on 2019-07-10 17:00:57