On Wednesday, February 07, 2018 13:39:55 Timothee Cour via Digitalmars-d-
learn wrote:
> ```
> void fun_bad3(T)(T a);  // declaration [1]
> void fun_bad3(T)(T a){};  // definition [2]
> void test(){
>   fun_bad3(1);
> }
> ```
> Error: test_all.fun_bad3 called with argument types (int) matches both:
> main.d(11):     test_all.fun_bad3!int.fun_bad3(int a)
> and:
> main.d(12):     test_all.fun_bad3!int.fun_bad3(int a)
>
> should [1] be allowed?

It's useful with stuff like version(Ddoc).

> compler doens't allow defining it afterwards in
> [2] (unlike function definitions, and, well, modulo this regression
> https://issues.dlang.org/show_bug.cgi?id=18393)

It's been my understanding that it's always been illegal to provide a
definition for a function that was declared previously unless it was
declared in a .di file, in which case, you're not really both declaring and
defining it, but the .d file is used when the module is compiled, and the
.di file is used by other modules which use that module, so the declaration
and definition are not seen by the same run of the compiler.

- Jonathan M Davis

Reply via email to