Re: Assignment of tuples

2020-05-20 Thread Simen Kjærås via Digitalmars-d-learn
On Wednesday, 20 May 2020 at 13:51:05 UTC, Steven Schveighoffer 
wrote:

Please file an issue.


https://issues.dlang.org/show_bug.cgi?id=20850

--
  Simen


Re: Assignment of tuples

2020-05-20 Thread Steven Schveighoffer via Digitalmars-d-learn

On 5/20/20 8:17 AM, Russel Winder wrote:

So I have an enum:

enum RC5Command: Tuple!(ubyte, ubyte) {
Standby = tuple(to!ubyte(0x10), to!ubyte(0x0c)),
…

I can do:

RC5Command rc5command = RC5Command.CD;

However, if I do:

rc5command = RC5Command.BD;

I get:

source/functionality.d(80,16): Error: template std.typecons.Tuple!(ubyte, 
ubyte).Tuple.opAssign cannot deduce function from argument types 
!()(RC5Command), candidates are:
/usr/lib/ldc/x86_64-linux-gnu/include/d/std/typecons.d(900,19):
opAssign(R)(auto ref R rhs)
   with R = RC5Command
   must satisfy the following constraint:
areCompatibleTuples!(typeof(this), R, "=")

which is totally unreasonable. And yet D insists. I guess there is an
explanation, but mostly this seems like a bug.



The issue is that it's not EXACTLY a Tuple, because it's a derived type. 
So it fails isTuple (In fact, I think the compiler just isn't smart 
enough to detect that it can be implicitly converted to a Tuple).


But that defeats a lot of wrapping mechanisms, which I think is unnecessary.

I think there should probably be an overload:

opAssign(Tuple t) {expand = t.expand;}

that trumps the template one. That should I think take care of it.

Please file an issue.

-Steve