Summary of Change
With 2023.0 release, ICX/ICPX compiler is switching to C++17 from C++14 as the default standard while doing C++ compilation. For SYCL users using DPCPP or icx/icpx -fsycl the default standard is already C++17 and will not be impacted by this change.
Summary of the potentially breaking changes in C++17 is as follows:
Language features removed in C++17:
- std::auto_ptr,
- deprecated function objects,
- std::random_shuffle,
- std::unexpected,
- obsolete iostreams aliases,
- trigraphs,
- register keyword,
- bool increment,
- dynamic exception specification
Language features deprecated in C++17:
- std::iterator,
- std::raw_storage_iterator,
- std::get_temporary_buffer,
- std::is_literal_type,
- std::result_of,
- all of <codecvt>
Expected Compilation Errors
When codes using features removed in C++17 are compiled with compiler version 2023.0 or later, they may fail to compile with errors as shown below
error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
error: ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]
Developers are recommended to modify their code to make it C++17 standards compliant or can compile with the option -std=c++14 as a temporary workaround.
Note: Intel® Compiler Classic(icc/icpc) still defaults to C++14.