Re: strangely silent compiler

2019-08-21 Thread Orfeo via Digitalmars-d-learn
On Wednesday, 21 August 2019 at 13:56:51 UTC, Eugene Wissner 
wrote:

On Wednesday, 21 August 2019 at 13:41:20 UTC, Orfeo wrote:

I've:
```
module anomalo.util;

// Foo doesn't exist  anywhere!

Foo toJsJson(string type, Args...)(string id, Args args) {
   static if (type == "int" || type == "outcome") {
  return Json(["id" : Json(id), "type" : Json(type), 
"value" : Json(0),]);

   } else {
  static assert(0, "invalid type");
   }
}

```

So:
```
$ dub build
```
No error!

```
$ /usr/bin/dmd -lib -ofliba.a -debug -g -w -I. 
src/anomalo/util.d -vcolumns

```

No error!

Here [github](https://github.com/o3o/anomalo) my project.

Thank you


toJsJson is a template. Templates are evaluated first when they 
are instantiated. Compiler doesn't give an error because it 
doesn't compile toJsJson, because you don't instantiate it 
anywhere.


You're right: if I add (into util.d)

```
unittest {
   import std.stdio;
   writeln(toJsJson!"int"("a"));
}
```


voila' :
```
$ dub test

src/anomalo/util.d(3,5): Error: undefined identifier Foo
src/anomalo/util.d(13,26): Error: template instance 
`anomalo.util.toJsJson!"int"` error instantiating

/usr/bin/dmd failed with exit code 1.
```

Thank you


Re: strangely silent compiler

2019-08-21 Thread Eugene Wissner via Digitalmars-d-learn

On Wednesday, 21 August 2019 at 13:41:20 UTC, Orfeo wrote:

I've:
```
module anomalo.util;

// Foo doesn't exist  anywhere!

Foo toJsJson(string type, Args...)(string id, Args args) {
   static if (type == "int" || type == "outcome") {
  return Json(["id" : Json(id), "type" : Json(type), 
"value" : Json(0),]);

   } else {
  static assert(0, "invalid type");
   }
}

```

So:
```
$ dub build
```
No error!

```
$ /usr/bin/dmd -lib -ofliba.a -debug -g -w -I. 
src/anomalo/util.d -vcolumns

```

No error!

Here [github](https://github.com/o3o/anomalo) my project.

Thank you


toJsJson is a template. Templates are evaluated first when they 
are instantiated. Compiler doesn't give an error because it 
doesn't compile toJsJson, because you don't instantiate it 
anywhere.