Can not overload template method function with const. Bug?
kenji hara
k.hara.pg at gmail.com
Wed Aug 8 08:54:27 PDT 2012
2012/8/9 Tobias Pankrath <tobias at pankrath.net>:
> On Wednesday, 8 August 2012 at 15:01:23 UTC, kenji hara wrote:
>>
>> In the declaration of std.typecons.Tuple:
>>
>> bool opEquals(R)(R rhs) if (isTuple!R)
>> {
>> // [snip]
>> }
>>
>> bool opEquals(R)(R rhs) const if (isTuple!R)
>> {
>> // same as non-const version
>> }
>>
>> Adding const version works correctly.
>> What's the problem?
>>
>> Kenji Hara
>>
> That's exactly what I've tried first. Using a git clone from yesterday and
> within phobos directory, using
>
>> make -f posix.mak
>
>
> everything works. Now I'm adding the const version of opEquals and I get:
> http://pastebin.com/akRdFfAJ
>
> But it's similar with the reduced example from the thread in d.learn. Does
> that work for you?
I've tried following code now, and it is exactly the bug 8522.
struct Point
{
bool opEquals(R)(R rhs) { return true; }
bool opEquals(R)(R rhs) const { return true; }
}
void main()
{
Point mp;
const Point cp;
assert(mp == mp);
assert(mp == cp);
assert(cp == mp);
assert(cp == cp);
}
This code doesn't work with current git head of dmd, but works with my patch.
https://github.com/D-Programming-Language/dmd/pull/1075
Kenji Hara
More information about the Digitalmars-d
mailing list