Modern C++ has a lot of useful new classes, methods, templates, and keywords introduced with the new C++ standards. Mostly they are new or enhanced versions of previous ones. Because of new modern technologies and software requirements, some of these features are being deprecated and some are being removed. In this post, we will list C++14 features removed from C++17 and beyond.
Table of Contents
What are the C++ 11 features removed from C++ 14?
Before we look at C++17, let’s remember that the gets
function was removed from C++14.
Why was the gets
function removed from C++?
In C++11 and before, we were able to use the gets
function. The std::gets
function was first defined in the C language and was available in C++11 and earlier. The gets
function reads inputs into a given char string. When a char
string has a newline character, it is considered the end of input, and an end-of-file condition occurs. The return value is captured on success, or a null pointer on failure. The gets function was deprecated in C++11 and removed in C++14. https://learncplusplus.org/why-was-the-gets-function-removed-in-c14/
What C++ 14 features were removed from C++ 17?
Now, let’s see C++14 features that were removed from C++17.
Trigraph sequences were removed from C++ 17
Trigraphs are sequences of three characters (such as “??=” , “??(” , “??)”, ….) used for the corresponding punctuation characters where the the compiler replaces with them. Trigraph sequences are used to be in the ISO (International Standards Organization) Invariant Code Set that was designed for the C programs. Implementations may offer trigraph-like features as part of their input encoding and trigraph sequences are removed in C++17. N4086
The register keyword was removed from C++ 17
The register
keyword remains reserved in C++17, but it no longer has any semantics. P0001R1
The Increment ++ for bool types was removed from C++ 17
Increment (++
) prefix and postfix expressions (b++, ++b) are no longer valid for operands of bool
types of C++17 and beyond. P0002R1
The throw method throw(A, B, C) was removed from C++ 17
In C++17 and beyond, Dynamic exception specifications of the form throw(A, B, C)
are no longer valid. Only throw()
remains as a synonym for noexcept(true)
. Note the change in termination semantics. P0003R5
auto_ptr, random_shuffle(), and old <functional> stuff were removed from C++ 17
Features that have been deprecated since C++11 and replaced with superior components are no longer included. Their names remain reserved, and implementations may choose to continue to ship the features. N4190
iostream aliases were removed from C++ 17
The deprecated iostream
aliases (depr.ios.members) in C++14 are removed in C++17. iostream features that have been deprecated since C++11 and are no longer included. P0004R1
The allocator support from function was removed from C++ 17
Allocator support for type-erasing, copyable types was difficult, and it was not implementable efficiently. Thus, the polymorphic function wrapper function
no longer has constructors that accept an allocator. P0302R1
C++ Builder is the easiest and fastest C and C++ compiler and IDE for building simple or professional applications on the Windows operating system. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for UIs.
There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.