C++ Logo

std-proposals

Advanced search

Re: New attribute to change the default specifiers and qualifiers

From: Paul Fee <paul.f.fee_at_[hidden]>
Date: Tue, 19 Jan 2021 15:47:40 +0000
Hello Vinícius,

I've often thought it would be preferable to have variables
immutable/const/read-only by default, following the principle of least
privilege. That would make C++ stricter and perhaps more secure by
default.

Backwards compatibility however means the default of
mutable/non-const/read-write can't be changed. Your suggestion of
scope wide specifiers has appeal. I'd like to see it explored
further.

Thanks,
Paul

On Tue, Jan 19, 2021 at 2:36 PM Vinícius Costa via Std-Proposals
<std-proposals_at_[hidden]> wrote:
>
> Hi!
>
> I'd like to propose a new attribute to change the default specifiers and qualifiers in a given scope.
>
> Often there's a lot of boilerplate code involved because the default specifiers and qualifiers are not the "correct" ones (stress on the quotation marks).
> So we need to explicitly make variables const, functions const, noexcept or final, etc.
>
> It would be a lot simpler to have a way to switch the default specifiers and qualifiers, making them more permissive or stricter.
>
> The idea is to create an attribute that would apply to a scope. With that, we won't mess with back-compatibility and it would allow an easy migration towards the new standard.
> Furthermore, it would help to enforce some good practices like const-correctness.
>
> For example, the following two codes will be the same.
>
> namespace example [[strict]] {
> class Foo : public Bar
> {
> void do_it(double *ptr) override
> {
> int x = /* some initialization code here*/
> /* more code here */
> }
> };
> }
>
> namespace example {
> class Foo final : public Bar
> {
> void do_it(double * __restrict ptr) const noexcept override final
> {
> const int x = /* some initialization code here*/
> /* more code here */
> }
> };
> }
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals

Received on 2021-01-19 09:47:54