#define WORKAROUND(cx_, saver_) \ Workaround WORKAROUND_PASTE(w_, __LINE__)((cx_), (saver_)) #define WORKAROUND_PASTE(a_, b_) WORKAROUND_PASTE2(a_, b_) #define WORKAROUND_PASTE2(a_, b_) a_ ## b_ /* having fun yet? */ #define SAVER(cx_, saver_) \ AutoValueRooter saver_(cx_); \ WORKAROUND((cx_), (saver_));