Bug 16427 – alias to typecons.Rebindable depends on lexical order

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2016-08-25T09:43:01Z
Last change time
2024-12-13T18:49:42Z
Keywords
rejects-valid
Assigned to
No Owner
Creator
Simon Naarmann
Moved to GitHub: dmd#19178 →

Comments

Comment #0 by s.naarmann — 2016-08-25T09:43:01Z
DMD64 D Compiler v2.071.2-b2 on Debian 6. This code doesn't compile: import std.typecons; alias RIA = Rebindable!(immutable(IA)); interface IA { Rebindable!(immutable(IA)) f(); } ./testinterface.d(7): Error: Rebindable!(immutable(IA)) is used as a type /usr/include/dmd/phobos/std/typecons.d(1616): Error: template instance std.traits.isDynamicArray!(immutable(IA)) error instantiating ./testinterface.d(5): instantiated from here: Rebindable!(immutable(IA)) /usr/include/dmd/phobos/std/typecons.d(1625): Error: mixin std.typecons.RebindableCommon!(immutable(IA), IA, Rebindable) does not match template declaration RebindableCommon(T, U, alias This) if (is(T == class) || is(T == interface) || isAssociativeArray!T) Failed: ["dmd", "-v", "-o-", "./testinterface.d", "-I."] =================================================================== Here are 3 variants of the above code. All compile and run perfectly. import std.typecons; alias REmpty = Rebindable!(immutable(Empty)); interface Empty { } interface IA { Rebindable!(immutable(IA)) f(); } alias RIA = Rebindable!(immutable(IA)); class B { Rebindable!(immutable(B)) f() { return rebindable(new immutable B()); } } alias RB = Rebindable!(immutable(B));
Comment #1 by robert.schadek — 2024-12-13T18:49:42Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19178 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB