On Wednesday, 28 September 2016 at 09:43:38 UTC, Mike Parker wrote:
Let's try this again.

This attribute block can be terminated by a corresponding protection attribute block:

// Begin private
private:
  void foo() {}

// End private
public:
   void bar() {}

But not all attributes have a corresponding attribute to turn them off:

// Begin @nogc
@nogc:
...

// End with scope/file

It would be a nice convenience to have something like this:

@nogc:

:end

Yes, I'm aware I could do this:

@nogc {}

But given the choice of : and {}, I'm tending to prefer the former these days. The lack of a way to turn off some attributes forces me to use {}. I recall discussions about something like @nogc(off) or some such. Was that ever approved? If not, I'd love to have something like :end, though I'm not attached to the name.

AFAIR, last year or so, Andrei approved the proposal for attr(bool expr), eg:

@nogc:

// no gc code here

@nogc(false):

// code that's allowed to use the gc here

class Base(bool overridableImpl)
{
   final:


   final(overridableImpl) void impl() { /* ... */
}

But still no one has stepped in to do the implementation.

Reply via email to