On 2011-06-16 16:01, Claudiu Verdes wrote: > Hi, > > I'm new to D and trying to follow Alexandrescu's TDPL code examples I came > across an error on the code below: > > class A > { > inout(int) val() inout > { > return _val; // error - see below > } > private int _val; > }; > > The compiler (dmd v2.052) complains on the marked line with the message > "Error: inout on return means inout must be on a parameter as well for > inout inout(int)()". > > What am I doing wrong? TDPL has a very similar example...
dmd has no fully implemented everything in TDPL. _Most_ of it has been, but not everything. inout is one of the few, major examples of a feature that is not fuly implemented yet, and it's essentially unusable at this point: http://d.puremagic.com/issues/show_bug.cgi?id=3748 alias this would be the other major feature that I can think of that TDPL talks about which doesn't yet quite work as TDPL describes. Unlike inout, alias this works (though it is rather buggy in some situations), but TDPL claims that you can have multiple alias this's per type, and that's not yet true. So, TDPL is a fantastic book, and it's mostly correct, but it ended up going to press before absolutely everything it mentions was fully implemented. If you search bugzilla ( d.puremagic.com/issues ) for TDPL, you'll find several bugs relating to dmd and TDPL not yet matching. In almost all cases, dmd is going to be changed to match TDPL rather than TDPL being ultimately wrong, but it does mean that occasionally, what you read in TDPL won't yet work in D. Official Errata: http://erdani.com/tdpl/errata/index.php?title=Main_Page - Jonathan M Davis