ok Hara Kenji just fixed the bug, see https://github.com/D-Programming-Language/dmd/pull/2041
So what's left unspecified now wrt DIP40?
My proposal was to just address case C2 below, not C1 (at least initially):
case C1:
template A(T1) {struct A{ this()(T1 a) {} }}
case C2:
struct A(T1){ this()(T1 a) {}}
Even though struct A(T1) may internally be implemented as template A(T1), I think the most useful / less problematic conversion is just case C2.
In other words, as i said before, the constructors inside a template (as in case C1) would note be considered as part of the overload set for this DIP40 (at least initially).