Bug 24345 – Issue with `alias this = xyz` inside structs.

Status
NEW
Severity
enhancement
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2024-01-19T06:55:38Z
Last change time
2024-12-13T19:32:41Z
Assigned to
No Owner
Creator
Danilo
Moved to GitHub: dmd#20385 →

Comments

Comment #0 by codedan — 2024-01-19T06:55:38Z
Example code: ```d module app; import std; void main() { auto x = new Derived(10, 20); } struct Base { int a; } struct Derived { Base base; int b; alias this = base; @disable this(); // `a` is not available for use with constructor parameters. // this( typeof(a) _a, typeof(b) _b ) { // // inside the body of the constructor, `a` is available! // a = _a; b = _b; writeln( a, ", ", b ); } } ``` Error: `Error: undefined identifier a` Problem: The compiler can't find the symbol `a` in the constructor parameters, although the symbol was "imported" into the struct scope by using `alias this = base;`.
Comment #1 by timon.gehr — 2024-01-27T02:44:36Z
This works with `-preview=fixAliasThis`. Maybe we can close this as WORKSFORME?
Comment #2 by codedan — 2024-01-30T06:38:50Z
(In reply to timon.gehr from comment #1) > This works with `-preview=fixAliasThis`. Maybe we can close this as > WORKSFORME? Thanks, that works! Will the preview get included into regular D in the near feature? „WorksForMeOnly“ is not so good if you want to make a public D package. ;)
Comment #3 by robert.schadek — 2024-12-13T19:32:41Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/20385 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB