On Saturday, 30 November 2024 at 18:11:56 UTC, realhet wrote:
narrowing it down would take

I was lucky, I narrowed down to only 2 files.

The recursion error occurs when I call this 'abomination' of a template function:
https://github.com/realhet/hetlib/blob/fe028689791d011cd98bc63042ee76e28fcffad2/het/Math.d#L2271

With a vector color:

```d
image2D(1, 2, RGB(0,0,0))
```

This 'statically' calls itself: image2D(ivec2(1, 2), RGB(0,0,0))

And generates a 1 step deep recursion:
```d
hetmath.image2D!("", int, int, Vector!(ubyte, 3)).image2D(int __param_0, int __param_1, Vector!(ubyte, 3) __param_2) hetmath.image2D!("", Vector!(int, 2), Vector!(ubyte, 3)).image2D(Vector!(int, 2) __param_0, Vector!(ubyte, 3) __param_1) hetmath.image2D!("", Vector!(int, 2), MapResult!(__lambda3, MapResult!(__lambda4, Result))).image2D(Vector!(int, 2) __param_0, MapResult!(__lambda3, MapResult!(__lambda4, Result)) __param_1) hetmath.d(609): Error: template instance `std.traits.isNumeric!(Vector!(float, 3))` recursive expansion
```

It doesn't seems too much...

```d
image2D(ivec2(1, 2), 123) and image2D(1, 2, 123)
```
work well, but then I'm restricted to one color channels. :/

For example this could be a recursion violation:
```d
return image2D!fun(ivec2(args[0], args[1]), args[2..$])
```
I 'call' itself but with a single 2d vector parameter instead of 2 integer width/height parameters.
I do a lot of these unifications to keep the amnount of code low.

And I learned long ago that better to use a single declaration that supports everything,
```d
auto image2D(alias fun="", A...)(A args) {}
```
A big overload set with all the possible parameter specializations will be not usable. At least this is my feeling based on my early experiences.

What annoys me the most is that I don't see the mechanics of what things are going towards the template recursion error. :S It's just seems like try and error and sometimes I find the voodoo magic that will solve it for a while :D But now it's kinda broken for me. (I had a big change since it worked: LDC 1.28->1.40)
  • How can I have t... realhet via Digitalmars-d-learn
    • Re: How can... realhet via Digitalmars-d-learn
      • Re: How... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
        • Re:... realhet via Digitalmars-d-learn
        • Re:... realhet via Digitalmars-d-learn
          • ... realhet via Digitalmars-d-learn
            • ... monkyyy via Digitalmars-d-learn
              • ... realhet via Digitalmars-d-learn

Reply via email to