This code completely breaks the compiler:

Ruby The Roobster rubytheroobster at yandex.com
Fri Aug 19 04:25:25 UTC 2022


On Friday, 19 August 2022 at 04:16:28 UTC, JG wrote:
> On Friday, 19 August 2022 at 03:13:03 UTC, Ruby The Roobster 
> wrote:
>> On Friday, 19 August 2022 at 03:10:38 UTC, Ruby The Roobster 
>> wrote:
>>> This snippet compiles.  Even if `dsds` and `sadsad` are 
>>> defined nowhere, this code compiles.
>>>
>>> [SNIP]
>>>
>>> The reason why this compiles is because of the varidic 
>>> template parameter, `Mtypes`.
>>>
>>> Either there is something I'm missing, or the compiler 
>>> completely breaks when it sees varidic template arguments.
>>
>> The only way to get the code to not compile is to actually 
>> call the function.
>
> I think it might help to post the entire code you think should 
> not compile (which does). I guess you are aware that templated 
> code is only "fully checked" when it is instantiated. E.g. this 
> will compile.
> ```d
> import std;
>
> auto nonsense(T)(T t) {
> return 5+"six";
> }
>
> void main() {
> }
> ```

So that's why it compiled.  Still, I believe that stuff like this 
ought to be detected at compile time, as supposed to in a 
unittest or, if someone forgot to write the tests, in production.


More information about the Digitalmars-d-learn mailing list