-3

Context ( You can skip )

I will be doing a presentation on Python, and will be touching upon V3's decision to be intentionally backwards incompatible, and how that has affected Python long term. I will be examining in particular their decision to remove the print keyword, because it was a decision that was not strictly neccessary. [ as far as I know ]

However, in order to be fair to the language, I wish to examine where C and C++ have done similar in their past, where they intentionally released a spec that when implimented, would definitely break existing code. I had tried asking around about this, and really only found one particular instance:

Why exactly was the C++ convenience of not requiring a second declaration, removed?

However it seems so esoteric of an example that it can hardly be considered relevant. I get the impression that breakages are actually quite frequent upon every C++ release, it is just not clear to me whether those breakages are bugs/oversights, or rather intentional breakages/deprecations introduced into the spec.


Actual Question:

Regarding C or C++

  • What is an instance where a change was introduced to the spec, that would knowingly break backwards compatibility?
    • [ To be clear, where old code ceases to be valid or compileable under an updated specification ]

Optional Details of Interest:

  • What was the rationalization for this change?
  • Was it absolutely neccessary?
  • How did compilers generally handle the change?
    • For example, were compatibility flags introduced? Were compiler warnings added before the change was finally implimented?
  • Were there any significant negative externalities which resulted from this change?
    • For example, years long endeavours to bring a large library up to spec?
  • In hindsight, was the decision made ultimately the best one, or were those involved in the change, express any sort of regret?

Thank you.

Anon
  • 3,639

1 Answers1

2

The (draft) International Standards list all the breaking changes in Annex C (informative) Compatibility [diff]

How did compilers generally handle the change?

Popular C++ compilers have options to target specific versions of the language, e.g. passing a command line argument to the invocation

Caleth
  • 12,190