[Issue 7535] New: Position of method in code inside class/struct decides that code is proper or invalid
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Feb 17 20:42:11 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7535
Summary: Position of method in code inside class/struct decides
that code is proper or invalid
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: nazriel6969 at gmail.com
--- Comment #0 from Damian Ziemba <nazriel6969 at gmail.com> 2012-02-17 20:42:09 PST ---
Greetings.
I've faced strange behaviour while working on my project.
// First snipped
//---
struct IrcEvent(T)
{
private T[] _container;
bool opOpAssign(string op, R)(R dlg)
if (op == "+")
{
_container ~= dlg;
return true;
}
}
class IrcClient
{
public IrcEvent!(void delegate(string)) OnMessageReceived;
}
class Foo
{
static public void Dispatch(IrcClient session)
{
auto operator = new Foo;
session.OnMessageReceived += &operator.Dispatch;
}
public void Dispatch(string msg)
{
}
}
void main()
{
auto irc = new IrcClient;
Foo.Dispatch(irc);
}
//---
Compiler refuse to compile this code with such message:
//---
./test.d(10): Error: cannot append type void delegate(IrcClient session) to
type void delegate(string)[]
./test.d(27): Error: template instance test.IrcEvent!(void
delegate(string)).IrcEvent.opOpAssign!("+",void delegate(IrcClient session))
error instantiating
//---
But when I change position of Dispatch methods in Foo class...
//Second source
//---
struct IrcEvent(T)
{
private T[] _container;
bool opOpAssign(string op, R)(R dlg)
if (op == "+")
{
_container ~= dlg;
return true;
}
}
class IrcClient
{
public IrcEvent!(void delegate(string)) OnMessageReceived;
}
class Foo
{
public void Dispatch(string msg)
{
}
static public void Dispatch(IrcClient session)
{
auto operator = new Foo;
session.OnMessageReceived += &operator.Dispatch;
}
}
void main()
{
auto irc = new IrcClient;
Foo.Dispatch(irc);
}
//---
Compiler doesn't complain!
The only difference between those 2 code snippets is position of Dispatch
method.
In first code example non-static version of method is under static version and
in second example static version of method is under non-static version.
In my opinion this is a bug, compiler should look at methods definitions and
try to fit delegate not fail on first attempt.
Best regards,
Damian Ziemba
--
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