I'm continuing to deal with the Windows 8 tags pretty regularly. (Some links in Is tag sponsorship contributing to confusion between "metro" and "metro-ui"?Is tag sponsorship contributing to confusion between "metro" and "metro-ui"?) I have an idea for a way to prevent some of the trouble.
Using a similar mechanism to tag-synonyms, users with the appropriate powers could declare certain tags to be "mismatches" to this one. So for windows-8, metro would be a mismatch and the text shown to the user could be:
Please use metro-ui for Windows 8 Metro Application questions.
For c++, c could be a mismatch with the text:
C and C++ are different languages; most questions need only one of these tags.
That one would probably also be added in the other order. Same for c# and vb.net - why would anyone tag a question with both? (But they do.)
Perhaps you wouldn't refuse to post a question with mismatched tags, or maybe you would refuse for lower-rep users and at some point allow it. But just providing some context-sensitive help, where the context is the other tags you've used, would help avoid mistaggings.