Somehow the tag synonym [cpp] for [c++] got official and then merged, seemingly without anyone noticing that cpp is the C preprocessor.

For normal users that info is gone now after the tags were merged, so is there any sensible way to fix this?
Or are my worries unfounded and the tag [cpp] was manually checked before being merged?

  • 12
    Congratulations! You have discovered and documented the single most egregious abuse of the C preprocessor :)
    – user50049
    Aug 15, 2010 at 17:10
  • 2
    bad, bad [cpp]! Aug 15, 2010 at 18:40
  • On a not very related note, do we really need a [preprocessor] and a [preprocessor-directives] tag? I'd think [preprocessor] is more than sufficient. Aug 15, 2010 at 23:42
  • @James: I agree, same with preprocessor-definitions and preprocessor-abuse. New [discussion] maybe? Aug 16, 2010 at 1:16
  • "Or are my worries unfounded and the tag [cpp] was manually checked before being merged?" we have no audit trail ... so I'll take the blame for it, we tried looking through questions during the 300 or so merges we ran in the last few weeks, it appears this one fell through the cracks, and then went unnoticed for many weeks. Sorry.
    – waffles
    Aug 16, 2010 at 1:22

6 Answers 6


This merge happened way back in January, far before the synonym system.

Here's a log of all logged tag merges involving [c++]

2010-08-06   Jeff Atwood      [visual-c++] into [msvc]
2010-07-16   Sam Saffron      [visual-c++] into [vc++]
2010-04-16   Bill the Lizard  [c++-cli] into [c++cli]
2010-01-11   Marc Gravell     [c++] into [cpp]
2009-07-20   Marc Gravell     [c++cli] into [c++-cli]
2009-07-20   Marc Gravell     [c++cli] into [c++clr]
2009-07-20   Marc Gravell     [standard-c++-library] into [c++-standard-library]
2009-07-20   Marc Gravell     [dev-c++] into [devc++]
2009-07-20   Marc Gravell     [visualc++2008-express] into [visual-c++-2008-express]
2009-07-20   Marc Gravell     [visual-c++] into [msvc++]
2009-07-20   Marc Gravell     [visual-c++] into [vc++]
2009-07-10   Marc Gravell     [visual-c++] into [visualc++]

Oh god. More votes need to be require for tag synonyms, there needs to be a way for the community to undo things that slipped under the radar, and we need a way to determine what the original tag was on existing questions.

I'm seeing several questions that are probably erroneously tagged C++, but there doesn't seem to be any way to determine for sure. e.g.:

Can you nest C preprocessor directives?

Is there any cure for the preprocessor blues?

Can you nest C preprocessor directives?

Is it possible to print a preprocessor variable in C?

And an update with a few more:

Is there a GCC preprocessor directive to check if the code is being compiled on a 64 bit machine?

What's the meaning of #line in C language?

C Macro definition to determine big endian or little endian machine?

Tim, I need to borrow your desk.

  • 5
    I'm going to look as well, just as soon as I'm done banging my head on my desk.
    – user50049
    Aug 15, 2010 at 17:14
  • I would not say that something asking about preprocessor is not a C++ question. The C++ language contains the preprocessor after all, and there are differences between the preprocessor of C++ and C (C99 does allow variadic arguments, while currently the C++ preprocessor does not). Aug 15, 2010 at 18:24
  • @litb: There is no evidence that any of the questions I linked to has anything to do with C++ or that the asker was using C++. As you point out, the C and C++ preprocessors are different, therefore just because a question is about the C preprocessor does not mean it can rightly be tagged C++. Aug 15, 2010 at 18:38
  • @Nicholas the questions i have looked at were tagged that way by the question poster (not sure what happens to tag edits during the grace period though). If the tagging would have been done by others later on, I would agree. Aug 15, 2010 at 18:52
  • 3
    @litb: No, because of the way tag synonyms work, you can't determine that, which is part of the problem. We have no way to differentiate between which questions were tagged c++ by the poster, and which were tagged cpp. Synonymization leaves no edit history. From the perspective of an ordinary user, it's as if a massive, retroactive, and completely undetectable search and replace was done on the database. Aug 15, 2010 at 18:59
  • @Nicholas ohh i see now! I had no idea, this is no good :( Aug 15, 2010 at 19:04
  • The same goes for mass-tag-merges that occured for many synonymed tags - they are also not visible in the history. Aug 15, 2010 at 21:53
  • @Nicholas: Synonyms only apply to new posts/edits, they don't automatically modify old posts. For that still a moderator is needed who merges the two tags explicitly (but such a mass-retag doesn't leave any edit history).
    – sth
    Aug 15, 2010 at 22:00
  • 1
    oh my god ! one out of 600 synonyms is arguably bad ... the whole system is broken ... we need more votes !!!
    – waffles
    Aug 16, 2010 at 1:19
  • 2
    @waffles: This isn't the first stupid synonym, there are probably more still lurking, and there will be more in the future. This one is just a particularly egregious example. Apparently, though, the ridiculously low vote threshold isn't to blame here -- you are. So maybe you could consider not being a jerk to boot? Aug 16, 2010 at 1:29
  • stupid synonyms are easy to fix, you just raise them on meta, I delete them, done... not having an audit trail and being able to undo a merge is a major piece of work that would require approval by Jeff. Bring that up as a separate issue, get some people to vote for it.
    – waffles
    Aug 16, 2010 at 1:33
  • persistent stupid synonyms are harder to fix, ones where the community decides incorrectly that one makes sense when it does not. to fix that we would have to amend our voting algorithm ... I have only come across one annoying one like that to date ... ecmascript -> javascript ...
    – waffles
    Aug 16, 2010 at 1:35
  • @waffles: this is a serious issue but it looks like you are taking it personally (it's obviously not personal) and just dismissing it as not a big deal. The fact that only 3 people can permanently destroy a tag is chilling. Think if I create a few additional accounts and get to 2000 reputation (trivial), then propose a tag synonym for C++ => C and upvote myself. The C++ tag will be permanently gone. Aug 16, 2010 at 1:40
  • 2
    MODERATORS MUST PERFORM A MANUAL MERGE TO FIX THE PAST 3 people can create a bad synonym, that only has an affect going forward. Then moderators look here stackoverflow.com/tags/synonyms?tab=newest&filter=merge and decide what to merge or nuke
    – waffles
    Aug 16, 2010 at 1:42
  • I am tempted to add a "permanent disallow" mod facility for synonyms
    – waffles
    Aug 16, 2010 at 1:44

Alright, I'll admit it; I'm the one who started the [cpp] <-> [c++] tag synonym vote. :(

I was (as usual) awake late, when I saw this new sparkly info tab! What could it be? (I hadn't read about it at all.) I saw the tag synonym and thought "Oh, I could be one of the first to propose one!"

I pondered for something to propose, and I recalled that long ago a question had [cpp] instead of [c++] and thought, "Hm, perhaps that'll do." I know cpp is the C Preprocessor, but I checked the tag anyway.

And to my surprise, if I remember correctly, there were no questions tagged cpp. (Probably due to this.) It was surprising but I didn't care.

So I went ahead and proposed it, and it was voted in, and I felt joyous and happy. But now I am full of regret at what I've done to the poor C preprocessor. :( I'm sorry poor C preprocessor.

(Had there been any C preprocessor questions under the [cpp] tag I'm sure I would have left it alone.)


The two tags were already merged earlier, even before the arrival of tag synonyms. I remember a discussion about it that I found here on meta when I first noticed the new synonym. I can't find it anymore, probably it was on a retag request and has since then been deleted. (Edit: It was this retag-request, now undeleted)

The reasoning could be that many people use "cpp" as a tag for C++, so that most questions with [cpp] aren't actually about the C preprocessor. If [cpp] is generally used with the meaning "C++", it doesn't help that it could/should really mean "C preprocessor".

The questions about the C preprocessor could also be tagged [c] [preprocessor].

  • 5
    Tags shouldn't be synonyms just because they can mean the same thing, or even usually mean the same thing. Tag synonyms are for things that are unambiguously identical. c++ and cpp are most assuredly not unambiguously identical, cpp attached to C++ questions that don't involve the preprocessor are tagged incorrectly and should be retagged. Aug 15, 2010 at 17:41
  • Even if most uses of cpp are meant as c++ (no way to check this now as i can't see the relevant information), a merge without manual checking/retagging is just plain wrong. Aug 15, 2010 at 17:44
  • Do you remember how long the request lived (here on meta) or when it was posted? I don't remember noticing it.
    – user50049
    Aug 15, 2010 at 17:51
  • I second the two separate tags. The preprocessor is part of the respective languages, and is not a language of its own. It's just commonly implemented as such. Cpp to me seems more likely mean C++ than c-preprocessor, but i don't think this justifies a synonym entry. Aug 15, 2010 at 18:26
  • @Tim Post: AFAIR it was a rather old request and I found it recently, soon after the cpp -> c++ synonym was established. It contained some comment like "Now after all these troubles with the C++ tag (URL encoding etc.), since it works again, let's use it and abolish that [cpp] tag people were using instead." Now I can't find any trace of it anymore, so I'm not sure of the title etc.
    – sth
    Aug 15, 2010 at 19:11
  • Thanks @sth, oh what a lovely mess this is.
    – user50049
    Aug 15, 2010 at 19:57
  • The retag-request I was talking about is this one here: meta.stackexchange.com/questions/35192 (10k only)
    – sth
    Aug 15, 2010 at 21:52
  • 5
    @sth: well, that proves yet again why batching up multiple, unrelated retag requests into a single proposal is a bad idea. No discussion at all.
    – Shog9
    Aug 15, 2010 at 22:14

Fixing an incorrect merge is very complicated.

Our MODERATOR ONLY merge process does not store the old list of questions with the previous tag anywhere. It simply does a global replace with no undo.

Further more, the tag is not even in the July dump (which is loaded into http://odata.stackexchange.com).

To fix this we would need to load up a database backup prior to the date this happened. And retag the affected questions.

Personally, I feel the "cpp" tag name is very confusing and misleading, as it could be used by newbies to describe "c++" (being the file extension and all)

  • Ouch, sad to hear. As for [cpp], maybe banning to force [c]+[preprocessor] et al or [c++] would help? I think the only alternative would be regular manual inspection. Aug 16, 2010 at 1:21
  • I deleted the [cpp] synonym, we have no dynamic banning facility (which would need to return an error message if it were built) ... it appears it was created on July 22, so a backup prior to then would contain the questions with the tags (eg. the june data dump)
    – waffles
    Aug 16, 2010 at 1:27
  • Apparently the mistake was already done before in january, so we'd have to work through the december and the june dump. Are those maybe accessible online somewhere as nicely as the data-explorer so a list could be linked to? Aug 16, 2010 at 1:48
  • Well, all the historic data dumps are still there and downloadable via clearbits
    – waffles
    Aug 16, 2010 at 1:56

If i haven't overlooked anything, there wasn't any real problem with merges. As per Jeffs answer, the last merge occured on 2010-01-11 and the [cpp] questions (only 4) from the 2009 Dec dump look fine:

Not the answer you're looking for? Browse other questions tagged .