http://d.puremagic.com/issues/show_bug.cgi?id=9907
Summary: Struct literal with destructor should match to non-ref
overload
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: wrong-code
Severity: major
Priority: P2
Component: DMD
AssignedTo: [email protected]
ReportedBy: [email protected]
--- Comment #0 from Kenji Hara <[email protected]> 2013-04-08 19:10:38 PDT ---
>From the forum discussion:
http://forum.dlang.org/thread/[email protected]
This code should call void opAssign(S rhs) twice.
import std.stdio;
import std.string;
version = destructor_defined;
struct S
{
int i;
string info() const
{
return format("%s(%s)", &i, i);
}
void opAssign(S rhs)
{
writefln("%s from Rvalue %s", this.info(), rhs.info());
}
void opAssign(ref S rhs)
{
writefln("%s from Lvalue %s", this.info(), rhs.info());
}
version (destructor_defined)
{
~this()
{
writefln("destroying %s", this.info());
}
}
}
S foo(int i)
{
return S(i);
}
void main()
{
auto s = S(1);
// Assignment from two kinds of rvalues
s = foo(2); // [1]
s = S(3); // [2]
}
In [1], void opAssign(S rhs) is called correctly.
But in [2], void opAssign(ref S rhs) is wrongly called.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------