I've also come across this problem. Although I'm using Cucumber for C++ (cucumber-cpp) with GTEST and GMOCK, your description fits very well.
I think there are three alternatives:
1) Empty steps as you describe
2) Rearrange the wording and the step order
3) Add the firing logic to some sort of a lambda and add it to a list which will be executed right after the expectation in the second (checking) step
Right now I'm doing nr 1), but I'd like to investigate 3. I would prefer not to change the wording or the order due to this.
Regards,
Knut Petter