I have a shared_ptr object x, which has get and set methods as follows:
x->a_value(); x->set_a_value(); x->b_value(); x->set_b_value();
What it says on the tin: ->a is not a single, valid preprocessor token: it's two tokens. You do not need to paste here.
->a
#define MAC(type) \ x->type##_value();