File tree Expand file tree Collapse file tree 1 file changed +36
-10
lines changed Expand file tree Collapse file tree 1 file changed +36
-10
lines changed Original file line number Diff line number Diff line change @@ -411,23 +411,49 @@ void main()
411
411
412
412
$(H3 $(LNAME2 alias-variable, Aliasing Variables))
413
413
414
- $(P Aliases cannot be used for expressions:)
414
+ $(P Variables can be aliased, expressions cannot:)
415
+
416
+ $(SPEC_RUNNABLE_EXAMPLE_RUN
417
+ -----------
418
+ int i = 0;
419
+ alias a = i; // OK
420
+ alias b = a; // alias a variable alias
421
+ a++;
422
+ b++;
423
+ assert(i == 2);
424
+
425
+ //alias c = i * 2; // error
426
+ //alias d = i + i; // error
427
+ -----------
428
+ )
429
+
430
+ $(P Members of an aggregate can be aliased, however non-static
431
+ field aliases cannot be accessed outside their parent type.)
415
432
416
433
$(SPEC_RUNNABLE_EXAMPLE_RUN
417
434
-----------
418
435
struct S
419
436
{
420
- static int i;
421
- static int j;
437
+ static int i = 0;
438
+ int j;
439
+ alias a = j; // OK
440
+
441
+ void inc() { a++; }
422
442
}
423
443
424
- alias a = S.i; // OK, `S.i` is a symbol
425
- alias b = S.j; // OK. `S.j` is also a symbol
426
- //alias c = a + b; // illegal, `a + b` is an expression
427
- a = 2; // sets `S.i` to `2`
428
- b = 4; // sets `S.j` to `4`
429
- assert(S.i == 2);
430
- assert(S.j == 4);
444
+ alias a = S.i; // OK
445
+ a++;
446
+ assert(S.i == 1);
447
+
448
+ alias b = S.j; // allowed
449
+ static assert(b.offsetof == 0);
450
+ //b++; // error, no instance of S
451
+ //S.a++; // error, no instance of S
452
+
453
+ S s = S(5);
454
+ s.inc();
455
+ assert(s.j == 6);
456
+ //alias c = s.j; // scheduled for deprecation
431
457
-----------
432
458
)
433
459
You can’t perform that action at this time.
0 commit comments