https://issues.dlang.org/show_bug.cgi?id=20686
--- Comment #6 from Basile-z <[email protected]> --- reduced to make reasoning on the problem easier --- alias AliasSeq(TList...) = TList; struct El(T) { void f2() { f(null); } void f(T2)(T2) { static assert(getSymbols!(El!T, "f2").length); } } alias X = El!char; void main() { X().f('a'); } template getSymbols(alias symbol, names...) { static if (names.length == 0) alias getSymbols = AliasSeq!(); else alias getSymbols = AliasSeq!(__traits(getMember, symbol, names[0]), getSymbols!(symbol, names[1 .. $])); } --- observations: 1. if you move the X definition in main() then that compiles ; 2. if you use this insted of El!T in El.f() then this compiles ; 3. if you use f('0') in El.f2() then this compiles, because this matches to the instance called in main() ; The 3rd point seems meaningful. --
