digitalmars.D.bugs - [Issue 15529] New: opEquals(string) conflicts with
- via Digitalmars-d-bugs (42/42) Jan 08 2016 https://issues.dlang.org/show_bug.cgi?id=15529
https://issues.dlang.org/show_bug.cgi?id=15529 Issue ID: 15529 Summary: opEquals(string) conflicts with opEquals(const(char)*) Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: code benjamin-thaut.de The following piece of code fails to compile in dmd 2.069.1 import core.stdc.string; struct StringWrapper { string str; bool opEquals(string str) const { return this.str == str; } bool opEquals(const(char)* cStr) const { return this.str == cStr[0..strlen(cStr)]; } } void main(string[] args) { auto w = StringWrapper("test"); assert(w == "test"); assert(w == "test\0".ptr); } The error is: /d233/f675.d(22): Error: overloads const bool(string str) and const bool(const(char)* cStr) both match argument list for opEquals /d233/f675.d(22): Error: f675.StringWrapper.opEquals called with argument types (string) matches both: /d233/f675.d(7): f675.StringWrapper.opEquals(string str) and: /d233/f675.d(12): f675.StringWrapper.opEquals(const(char)* cStr) I assume this is due to the implicit conversion of a string literal into const(char)*. --
Jan 08 2016