On Wednesday, 1 September 2021 at 22:51:40 UTC, Per Nordlöw wrote:
Can somebody explain the need for

```d
private template isSame(alias a, alias b)
{
static if (!is(typeof(&a && &b)) // at least one is an rvalue && __traits(compiles, { enum isSame = a == b; })) // c-t comparable
    {
        enum isSame = a == b;
    }
    else
    {
        enum isSame = __traits(isSame, a, b);
    }
}
```

when there is already

```d
__traits(isSame, a, b)
```

?

Are there any cases where

```d
__traits(isSame, a, b)
```

doesn't have the same value as

```d
a == b
```

provided the static if expression above is true.

the traits does not work on literals passed by _AliasTemplateParameter_.

```d
enum isSame1(alias a, alias b) = a == b;
enum isSame2(alias a, alias b) = __traits(isSame, a, b);

pragma(msg, isSame1!(0, 0));   // true
pragma(msg, isSame2!(0, 0));   // false
```

This looks a bit like a bug, because `__traits(isSame, 0, 0)` yields `true`

Reply via email to