On Tuesday, 31 May 2022 at 08:51:45 UTC, realhet wrote:
Hi,

In my framework I just found a dozen of compile time error handling like:

...else static assert("Invalid type");

This compiles without error. And it was useless for detecting errors because I forgot the first "false" or "0" parameter.

I think it is because of the weird case of "every string casted to bool is true".

There is an example in Phobos also: https://github.com/dlang/phobos/blob/master/std/uni/package.d
at line 8847: static assert("Unknown normalization form "~norm);

It is easy to make this mistake, but does static assert(string) has any meaningful use cases?

I was going to suggest to do something like:

```d
import std;

string compileError(string msg) {
  import std.format;
  return format("static assert(0,%(%s%));",[msg]);
}

auto doGreatThings(T)(T x)
{
    static if(is(T==int))
    {
        return "great things!";
    }
    else mixin(compileError("Invalid type."));
}

void main()
{
   doGreatThings!int(123).writeln;
   doGreatThings!string("oh dear").writeln;
}
```

But (a) why should you need to and (b) this makes the message more obscure.

onlineapp.d-mixin-14(14): Error: static assert:  "Invalid type."
onlineapp.d(20): instantiated from here: `doGreatThings!string`

Reply via email to