#include <iostream>

template <typename T>
struct ReIm
{
    const ReIm* operator ->() const { return this; }
    ReIm* operator ->() { return this; }

    T re;
    T im;
};


struct Cplx
{
    double x;
    double y;
    
    ReIm<double> operator ->() const { return {x, y}; }
    ReIm<double&> operator ->() { return {x, y}; }
};

int main() {
    Cplx c{4, 5};

    c->re = 42;
    c->im = 51;
    
    std::cout << c.x << " " << c.y << std::endl;
}
