Fact checking for my talk

Liam McSherry via Digitalmars-d digitalmars-d at puremagic.com
Sat Aug 13 06:02:09 PDT 2016


On Saturday, 13 August 2016 at 12:47:40 UTC, Ethan Watson wrote:
>
>                              |  Rust   |  Swift  |    C#   |
> -----------------------------|---------+---------+---------|
>     Template Constraints     |    Y    |    Y    |  where  | [1]
> -----------------------------|---------+---------+---------|
>   Template "if" Constraints  |  where  |  where  |  where  |
> -----------------------------|---------+---------+---------|
>         static if            |    N    |    N    |    N    |
> -----------------------------|---------+---------+---------|

It might be something to note that C# doesn't have templates. 
Generics can only have type parameters (i.e. `int` or `string` 
not `5` or `Hello World`), and the `where` constraint is pretty 
restricted in what it can do:
o Is T or is subclass of T/implements interface (class C<T> where 
T : U)
o Default/parameterless constructor (class C<T> where T : new())
o Reference/value type checking (class C<T> where T : class/where 
T : struct)

For "static if," C# also has a very limited conditional 
compilation system that is barely comparable. Symbols can be 
defined at compile time, but they can't have values and they can 
only be used with specific directives:
---
#define X

#if X
     doA();
#else
     doB();
#endif
---


More information about the Digitalmars-d mailing list