On Thursday, 29 February 2024 at 10:30:59 UTC, DUser wrote:
On Wednesday, 28 February 2024 at 22:48:33 UTC, Gregor Mückl wrote:
...
But how can I bind Wrapper\<void> in D? Specifically, how do I even express that template specialization in D syntax?

Did you mean any of these?

1. Parameter specialization:
```d
extern(C++, class):
class Wrapper(T) {...}
class Wrapper(T : void) {...}
```
2. Template constraints:
```d
extern(C++, class):
class Wrapper(T) if(!is(T == void)) {...}
class Wrapper(T) if(is(T == void)) {...}
```
3. `static if`:
```d
extern(C++, class)
class Wrapper(T) {
  static if (!is(T == void))
    private T t;
  private bool valid;
  public final isValid();
}
```

Thanks! This got me unstuck. I've picked the first solution. It mirrors the C++ code nicely.

The embarrassing part is that I should have known the other two options, but my head got completely stuck trying to convert C++ to D too literally.

Reply via email to