[Issue 9907] New: Struct literal with destructor should match to non-ref overload
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Apr 8 19:10:46 PDT 2013
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: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2013-04-08 19:10:38 PDT ---
>From the forum discussion:
http://forum.dlang.org/thread/kjv4ae$3hp$1@digitalmars.com
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: -------
More information about the Digitalmars-d-bugs
mailing list