The expected behavior is that both "a" and "b" are defined and macro expanded during compilation, regardless of whether it was defined before or after use. I'm not sure if that's a valid bug, but here you go anyway. Best of love, -- Artyom Bologov https://aartaka.me