Date: Mon, 15 Aug 2022 14:54:31 -0400
> When using headers, it is quite easy to make the functions accessible through namespaces > without wrapping the entire file in a namespace block. Simply wrap the list of functions in the header in a namespace block and prepend the namespace onto the functions in the file.
Such use of the preprocessor is against good style: in particular, header file should not be design to 'capture' context surrounding include directives and should only be included from the outermost scope (global) and usually before all declarations in the file. (even gcc's own header files stick to this rule).
see:
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#sf4-include-h-files-before-other-declarations-in-a-file
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#sf11-header-files-should-be-self-contained
Btw, the hole point of modules is to make it possible to minimize most use of the preprocessor.
If this is only a matter of minimizing nesting levels and indentation, then you should note that there is a formatting option for this (clang-format):
NamespaceIndentation: Inner, All
Julien V.
-------- Original Message --------
From: Jason McKesson via Std-Proposals <std-proposals_at_[hidden]>
Sent: August 15, 2022 10:01:16 a.m. EDT
To: std-proposals_at_[hidden]
Cc: Jason McKesson <jmckesson_at_[hidden]>
Subject: Re: [std-proposals] Export namespaces without namespace block, only keyword (modules)
On Mon, Aug 15, 2022 at 3:46 AM Zopolis0 via Std-Proposals
<std-proposals_at_[hidden]> wrote:
>
> In short-- I propose that there should be a way (if not multiple) to export functions within a namespace from a module without having to wrap the functions in a namespace block.
> A few possibilities for the syntax of doing so are presented below, along with the rationale.
> Suggestions for alternative/additional syntaxes or improvements on the ones proposed would be welcome.
> Briefly:
> Instead of
> export module foo;
>
> export namespace foo
> {
> void bar();
> }
> Allow the usage of
> export module foo;
> export namespace foo void bar();
>
> Haven't really decided on the breadth of the syntax and how many ways there would be to declare the namespace, was thinking about a file-wide namespace declaration along the lines of:
> export module foo:
> export namespace foo;
> This would set everything exported from module foo to be in namespace foo.
Why do you need a shorter way to say that? Namespace names and module
names probably *shouldn't* always be the same. It would make it
difficult to use sub-modules, where multiple modules contribute to one
larger module.
> This of course would not work for multiple namespaces in a file, for which the original keyword proposition could be used as a fallback.
>
> Rationale:
> Namespaces are cool. (I see no reason to provide a rationale for the usage of namespaces in this proposal.)
> When using headers, it is quite easy to make the functions accessible through namespaces without wrapping the entire file in a namespace block. Simply wrap the list of functions in the header in a namespace block and prepend the namespace onto the functions in the file.
>
>
> With modules, one has to wrap the entire file in a namespace block, or at least the functions they want to export, which is sub-par.
Why is that "sub-par"?
-- Julien Villemure
Sent from my Android device with K-9 Mail.
Such use of the preprocessor is against good style: in particular, header file should not be design to 'capture' context surrounding include directives and should only be included from the outermost scope (global) and usually before all declarations in the file. (even gcc's own header files stick to this rule).
see:
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#sf4-include-h-files-before-other-declarations-in-a-file
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#sf11-header-files-should-be-self-contained
Btw, the hole point of modules is to make it possible to minimize most use of the preprocessor.
If this is only a matter of minimizing nesting levels and indentation, then you should note that there is a formatting option for this (clang-format):
NamespaceIndentation: Inner, All
Julien V.
-------- Original Message --------
From: Jason McKesson via Std-Proposals <std-proposals_at_[hidden]>
Sent: August 15, 2022 10:01:16 a.m. EDT
To: std-proposals_at_[hidden]
Cc: Jason McKesson <jmckesson_at_[hidden]>
Subject: Re: [std-proposals] Export namespaces without namespace block, only keyword (modules)
On Mon, Aug 15, 2022 at 3:46 AM Zopolis0 via Std-Proposals
<std-proposals_at_[hidden]> wrote:
>
> In short-- I propose that there should be a way (if not multiple) to export functions within a namespace from a module without having to wrap the functions in a namespace block.
> A few possibilities for the syntax of doing so are presented below, along with the rationale.
> Suggestions for alternative/additional syntaxes or improvements on the ones proposed would be welcome.
> Briefly:
> Instead of
> export module foo;
>
> export namespace foo
> {
> void bar();
> }
> Allow the usage of
> export module foo;
> export namespace foo void bar();
>
> Haven't really decided on the breadth of the syntax and how many ways there would be to declare the namespace, was thinking about a file-wide namespace declaration along the lines of:
> export module foo:
> export namespace foo;
> This would set everything exported from module foo to be in namespace foo.
Why do you need a shorter way to say that? Namespace names and module
names probably *shouldn't* always be the same. It would make it
difficult to use sub-modules, where multiple modules contribute to one
larger module.
> This of course would not work for multiple namespaces in a file, for which the original keyword proposition could be used as a fallback.
>
> Rationale:
> Namespaces are cool. (I see no reason to provide a rationale for the usage of namespaces in this proposal.)
> When using headers, it is quite easy to make the functions accessible through namespaces without wrapping the entire file in a namespace block. Simply wrap the list of functions in the header in a namespace block and prepend the namespace onto the functions in the file.
>
>
> With modules, one has to wrap the entire file in a namespace block, or at least the functions they want to export, which is sub-par.
Why is that "sub-par"?
-- Julien Villemure
Sent from my Android device with K-9 Mail.
Received on 2022-08-15 18:54:42