On Friday, 26 September 2014 at 19:47:15 UTC, Steven Schveighoffer wrote:
I wanted to bring this over from D.learn, because I've never seen this before, and it's an interesting solution to creating a property without much boilerplate.

So here it is:

class Foo
{
   union
   {
      private int _a; // accessible only in this module
public const int a; // accessible from anywhere, but read only
   }
}

And it works now, probably has for a while.

Thoughts? This can easily be boilerplated in something like roprop!(int, "a")

I am really not sure what union does to compiler optimization or runtime concerns, if it has any significant drawbacks. From what I can tell, it's a valid solution.

Credit to Mark Schütz for the idea.

-Steve

Thanks, I love this!

There is actually a very important ABI difference, in all other "property" implementations in other languages(of which I'm aware), the ABI is changed to be a method rather than a member, for this reason I think we shouldn't refer to this feature as a "property", maybe "field/member" is more appropriate?

Both properties and "access restricted fields" has their place depending on what one is trying to accomplish, but in most cases I find myself wanting this very feature and not normal properties.

I couldn't resist trying this in C++, clang rejected it outright, GCC let it through with a warning.

Reply via email to