This recipe is very specific. Small deviations have caused this not to trigger for no reason that I can determine. emacs -Q matchertags.hpp M-x c-toggle-parse-state-debug RET C-v C-n C-n C-n C-n C-n C-n C-n // Should be on std::conditional line M-f M-f M-f M-f C-f // Should be on ::value M-d ( ) This causes the following output: c-parse-state inconsistency at 774: using cache: (412 (368 . 391) 293), from scratch: ((706 . 708) 412 (368 . 391) 293) Old state: (setq c-state-cache ’(412 (368 . 391) 293) c-state-cache-good-pos 708 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 802 c-state-semi-nonlit-pos-cache nil c-state-semi-nonlit-pos-cache-limit 802 c-state-brace-pair-desert ’(412 . 803) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg nil c-state-old-cpp-end nil c-parse-state-point 711) c-parse-state inconsistency at 778: using cache: (412 (368 . 391) 293), from scratch: ((706 . 708) 412 (368 . 391) 293) Old state: (setq c-state-cache ’(412 (368 . 391) 293) c-state-cache-good-pos 708 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 802 c-state-semi-nonlit-pos-cache nil c-state-semi-nonlit-pos-cache-limit 802 c-state-brace-pair-desert ’(412 . 803) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg nil c-state-old-cpp-end nil c-parse-state-point 774)