Thread overview
Oh, no UFCS for member functions
Mar 29, 2016
Luís Marques
Mar 29, 2016
Anonymouse
Mar 29, 2016
Luís Marques
March 29, 2016
Too bad this doesn't work:

struct Player
{
    MapTile[] playerMap; // partial private knowledge of map
    Location destination;

    auto tile(Location loc)
    {
        return playerMap[loc];
    }

    void foo()
    {
        if(destination.tile.hasMonster)
            ...
    }
}
March 29, 2016
On Tuesday, 29 March 2016 at 14:56:53 UTC, Luís Marques wrote:
> Too bad this doesn't work:
>
> struct Player
> {
>     MapTile[] playerMap; // partial private knowledge of map
>     Location destination;
>
>     auto tile(Location loc)
>     {
>         return playerMap[loc];
>     }
>
>     void foo()
>     {
>         if(destination.tile.hasMonster)
>             ...
>     }
> }

By design. I don't remember the rationale, though.

The ugly workaround if you really don't want to reorganise things (and/or use the tile function directly) is to make a top-level alias tile = Player.tile;
March 29, 2016
On Tuesday, 29 March 2016 at 15:08:05 UTC, Anonymouse wrote:
> The ugly workaround if you really don't want to reorganise things (and/or use the tile function directly) is to make a top-level alias tile = Player.tile;

Cool, I was not aware of that workaround. Also, I wonder if this workaround doesn't argue somewhat against the rationale for not having member-function UFCS, whatever it was.