Bind C++ template specialized with void parameter

Gregor Mückl gregormueckl at gmx.de
Fri Mar 1 04:57:07 UTC 2024


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.


More information about the Digitalmars-d-learn mailing list