This table lists C++11 features and whether they can be used in Inkscape or not (yet). Add C++11 features that you would like to use to the table, so that we know what to test for to increase the C++11 "allowance".
|std::unique_ptr<>||from 0.93||Replaces boost::scoped_ptr<> and std::auto_ptr<>|
|std::shared_ptr<>||from 0.93||Replaces boost::shared_ptr<>|
|std::unordered_*<>||from 0.93||Replaces the hack in util/unordered-containers.h|
|auto (type inference)||from 0.93|
|enum class||not yet||Strong enum constants (take the name of the enum, can't be implicitly converted to |
|range-based for||from 0.93||Concise for loops with containers (Python alike)|
|lambda functions||not yet||In-place definitions for small functions|
|constructor delegation||not yet||Reduces boilerplate when an object has many constructors|
|right angle brackets in templates||not yet||Fixes coding style oddity|
|async, futures||not yet||Allows easy multithreading|
|std::initializer_list||not yet||Easier container initialization/assignation and implicit constructor calls|
|constexpr||?||Additional meanings in C++14/C++17|
|toxic feature of doom||NO||Never use this (in case we stumble upon C++11 features that we really don't like)|
We need to keep coordinated with the section on Distro Dependencies.
Also see this page:
__cplusplus is always
1 for GCC 4.6 that is used on Windows. So
#if __cplusplus < 201103L or variants does not work to choose between C++03 or C++11 code.
C++11 is well supported by all major compilers (MSVC has only partial support for constexpr). In fact C++14 and C++17 are also well supported by all platforms we support.
Compiler version when feature complete:
|C++11||4.8 (2014)||3.1 (2013) (3.3 for local thread storage and inheriting constructors)||19 (except C99 preprocessor and constexpr)|
|C++14||5 (2015)||3.4 (2013)||19 (2017) (19.1 for member initializers)|
|C++17||7 (2017)||4 (2017) (5 for constexpr lambda expressions)||19.14 (2017)|
'*' Mostly complete '#' About half complete