[Issue 21768] New: typeid(Expression) doesn't properly resolve opIndex overload
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Mar 25 18:22:53 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=21768
Issue ID: 21768
Summary: typeid(Expression) doesn't properly resolve opIndex
overload
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: trivial
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: blackbirdcry806 at gmail.com
When using the typeid(Expression) statement where "Expression" is a membership
access of a struct that is returned by a opIndex oveload that takes only one
parameter, the compiler resolve it as an array access instead of a opIndex
call.
Adding parenthesis around the expression solve the problem but looks
inconsistent.
godbolt link: https://godbolt.org/z/djjxqvKr8
sample code (same as above):
struct Vec2
{
int x, y;
}
class Entity
{
}
struct Tile
{
Entity e;
}
class World
{
auto opIndex(Vec2 i)
{
return Tile();
}
auto opIndex(int i, int j)
{
return Tile();
}
auto opIndex(int i)
{
return Tile();
}
}
void main()
{
auto w = new World();
// auto id = typeid(w[Vec2(0, 0)].e); // compile error here
// auto id4 = typeid(w[0].e); // error as well
// works fine
auto id2 = typeid((w[Vec2(0, 0)].e));
auto id3 = typeid(w[0, 0].e);
}
--
More information about the Digitalmars-d-bugs
mailing list