C++ Evolution and Standardization
The standardization history can be read as an ordered list of dated events.
Why a Standard Rarely Finishes on Time
Many learners picture a programming language standard as a document written in one focused effort, given a release year, and then simply published. Under that picture, a project that begins in one year should finish within a predictable and fairly short window. This article tests that belief against the history of C++ standardization, because the history shows a different pattern.
The article follows the record step by step. You will first look at why the belief about predictable schedules fails, then read the dated milestones in order, then follow the working name C++0x as it turns into the final name C++11, and finally look at the Technical Reports that appeared alongside the main work.
The Predictable-Schedule Belief
The belief has a simple shape: a standard is a finished product that is planned, written, and released, with each step taking roughly as long as its planners expect. If a project starts in a given year, the planners assume a date for completion and expect the work to land near it.
The source does not support this belief. It states that a language standard does not reliably finish on the schedule its early planning suggests, and it explicitly notes that overly optimistic completion dates are common in large projects. The revision that became C++11 is a case of exactly this pattern: its completion date was set too optimistically during the same development period in which it carried the working name C++0x.
Reading the Standardization Timeline
The standardization history can be read as an ordered list of dated events. Each event below is taken from the source record. Read them in order and notice how the gaps between them vary.
- 1998: the ISO C++ standard is published, and it is the starting point of the record.
- 2002: work on a revised standard begins; the colloquial name for that revision is C++0x.
- 2003: a bug fix revision of the ISO C++ standard is issued, and a Technical Report introduces new library components.
- 2006: an ISO C++ Technical Report on Performance is issued to address questions of cost, predictability, and techniques.
- 2011: C++11 is formally approved as the final name for the revised standard.
- 2012: work on future ISO C++ standards, referred to as C++14 and C++17, starts.
- 2013: the first complete C++11 implementations emerge, and the C++ Programming Language, Fourth Edition introduces C++11 to readers.
Working Out the 2002 to 2011 Gap
What do you think happens?
Work on the revised standard that became C++11 began in 2002, and the standard was formally approved in 2011. How many years did that process take? Make a prediction before you read the answer.
Reveal answer
About 9 years
Subtracting the start year from the approval year gives 2011 minus 2002, which is 9 years. The record shows a nine-year span between the start of the revised standard's work and its formal approval, even though the work was planned against an optimistic completion date.
Measuring the gaps between milestones
Using only the dates in the source record, how many years separate each consecutive pair of milestones from 1998 to 2013?
- 1List the dates in order
The milestones fall in 1998, 2002, 2003, 2006, 2011, 2012, and 2013.
- 2Subtract each date from the next
From 1998 to 2002 is 4 years. From 2002 to 2003 is 1 year. From 2003 to 2006 is 3 years. From 2006 to 2011 is 5 years. From 2011 to 2012 is 1 year. From 2012 to 2013 is 1 year.
- 3Find the largest gap
The longest stretch between recorded milestones is the 5 years from 2006 to 2011, which covers the period in which the revision moved toward approval. The source records no milestone inside that stretch, which is part of why the record is silent about the intermediate progress.
- 4Compare the total span
From the start of the revised work in 2002 to approval in 2011 is 9 years, which is the single most important span for understanding the schedule slip.
The gaps are 4, 1, 3, 5, 1, and 1 years. The span from the start of work on C++0x to the approval of C++11 is 9 years.
C++0x and C++11: One Effort, Two Names
C++0x and C++11 are not two separate languages that happen to be related. C++0x was the colloquial working name used while the revised standard was being developed, beginning in 2002. Once the standard was formally approved in 2011, the final name became C++11. The development name and the final name refer to the same effort, viewed at two different stages.
The working name also sits inside the story of the schedule slip. During development the revision was known as C++0x, and that same development period is when the completion date was set too optimistically. The revision was therefore a moving project under a provisional label until approval fixed its final identity as C++11.
Technical Reports as Lighter-Weight Outputs
The standardization history includes more than the revised standard itself. Technical Reports are separate outputs connected to the standardization work. They address specific concerns or introduce specific material without being the revised standard. The source records two of them, and the two examples show different roles.
| Output | Year | What the source says it did | Connection to the revised standard |
|---|---|---|---|
| ISO C++ standard (1998) | 1998 | The baseline standard from which later revision work began | The starting point of the record |
| Library Technical Report | 2003 | Introduced regular expressions, unordered containers (hash tables), and resource management pointers | These components later became part of C++0x |
| Technical Report on Performance | 2006 | Answered questions of cost, predictability, and techniques, mostly related to embedded systems programming | Addressed a specific concern without being the revised standard |
The table lists only the facts recorded in the source. The source does not give further detail on the status or formal weight of each report.
Mistakes When Reading the Record
Common mistake Assuming the revision had a short, predictable window because it had a start year
What it looks likeReading only that work began in 2002 and expecting approval within a year or two.
Why it failsThe source states that completion dates set early in planning are often too optimistic, and the record shows approval in 2011.
Do this insteadRead the start year and the approval year together, and calculate the actual span from the dated record.
Common mistake Treating C++0x as a separate language
What it looks likeListing C++0x and C++11 as two different efforts in a timeline.
Why it failsThe source says C++0x was a working name for the same revision that was formally approved as C++11.
Do this insteadRecord C++0x as the development name and C++11 as the final name of one revision.
Common mistake Confusing a Technical Report with the revised standard
What it looks likeDescribing the 2006 performance report as the new language standard.
Why it failsThe source describes the performance report as addressing a specific concern, not as the revised standard.
Do this insteadDescribe Technical Reports as separate, lighter-weight outputs connected to the standardization work.
Common mistake Skipping the 2003 bug fix revision because it is not the revised standard
Practice: Tracing the Record
Using only the dated milestones in this article, list the events that occurred in 2003 and explain why that year contains two different kinds of output. Then state the number of years between the 1998 ISO C++ standard and the 2011 approval of C++11.
Hints
- Look for both the bug fix revision and the Technical Report that introduced library components.
- Subtract 1998 from 2011 to find the span.
Explain in two or three sentences why a standard's start year cannot be used to predict its finish date, using the C++0x and C++11 example.
Hints
- Refer to the optimistic completion date and the nine-year span from 2002 to 2011.
- Mention that the revision carried the working name C++0x during development.
Summary of the Standardization Record
- 1A language standard does not reliably finish on the schedule its early planning suggests, and overly optimistic completion dates are common in large projects.
- 2The C++ record runs from the 1998 ISO C++ standard through the 2013 implementations of C++11, with work on C++0x beginning in 2002 and approval in 2011.
- 3C++0x was the working name for the revision, and C++11 is the final name for the same revision.
- 4Technical Reports, such as the 2003 library report and the 2006 performance report, are separate outputs connected to the standardization work and do not replace the revised standard.
At a glance
- A language standard does not reliably finish on the schedule its early planning suggests, and overly optimistic completion dates are common in large projects.
- The C++ record runs from the 1998 ISO C++ standard through the 2013 implementations of C++11, with work on the revision beginning in 2002 and approval in 2011.
- C++0x was the working name for the revision during development, and C++11 is the final name for the same revision.
- Technical Reports, such as the 2003 library report and the 2006 performance report, are separate outputs connected to the standardization work and are not the revised standard itself.