For ARMCC5 here I can find the C++ supported features.
I see that additions to the C++11 standard template library are NOT supporte.
ARM® Compiler 5 includes only the C++03 standard template library.
And so std::array is not supported by ARMCC6.
For ARMCC 6 I read that
It fully supports the C++14 language standard.
Does this mean that the whole C++ STL is already supported in ARMCC 6?
I'm almost interested in std::array
Which are the disadavantages in migrating the code to the new ARMCC 6?
Is an official release? Or is it a kind of beta?
Hi,
You're absolutely right, ARM Compiler 5 doesn't provide support for C++11 and so doesn't support std::array. We added C++11 support to ARM Compiler 6 some time ago, and that includes support for std::array. Support for C++11 in ARM Compiler is complete and fully productised with one exception: the atomics and threading model that enables RTOS primitives to be used. For that we've finished the API and the functionality is sound, but we may make some minor changes as we receive feedback from users and as we deepen our testing in that area. We would regard that API as alpha standard, although we know of no problems and we have no changes planned at this moment.
C++14 support in ARM Compiler 6 is a community feature. This means that the implementation has come from the upstream LLVM community, and we've not yet performed the depth and breadth of testing we would need to confirm this as a fully supported feature of ARM Compiler 6. We do know that customers have been using it for some time now and we've heard of no issues, but until we've completed our in-depth testing we can't really make statements about completeness or quality. We would welcome your feedback there!
In terms of migrating code from ARM Compiler 5 to ARM Compiler 6 I can think of many advantages, but it's hard to identify many disadvantages! All of our active development is now on Compiler 6, which offers better GCC compatibility (in terms of command-line options and language support), stronger diagnostics, and of course advanced language support in areas like C++11 and C++14. Depending on which core you're targeting and what kind of workflows you're implementing, you're also likely to see benefits in terms of code performance or code density. One area of particular interest here is our implementation of Link Time Optimization (LTO) in Compiler 6. This gives an average performance boost of around 10% over a wide range of benchmarks, and can also give significant benefits in code size. ARM Compiler 6 has also been qualified for use in development for functional safety against key safety standards, testifying to the quality and capabilities of the compiler.
If you're looking at migrating a project from ARM Compiler 5 to ARM Compiler 6, you may find our migration guide handy. This is a comprehensive reference guide that covers differences between the two compilers in command-line options, language support, pragmas and intrinsics. Most projects are very easy and quick to migrate. However if your project pushes the compiler's language support to the limits, the migration guide will contain some very useful information. The guide, with the rest of the documentation for Compiler 6, can be found here: https://developer.arm.com/products/software-development-tools/compilers/arm-compiler/docs/version-6-7
Thanks,
Paul.
Paul,
I appreciate your very thorough reply, but now 4+ years later, I wonder if it's still entirely correct. ARMCC 5.06 does supports C++11, albeit with some restrictions. I've tried to navigate the documentation around this but the website is quite challenging, and seems to have gotten worse lately.
Can you please clarify if there's a way to use the array template within ARMCC 5.06. It's part of the c++11 standard library. Even better if you can point to some documentation that lists what is/isn't supported, mentioning array. I'd like to write something like:
#include <array>
std::array<int, 3> a2 = {1, 2, 3};
Thanks a ton, your expertise is much appreciated!
Hello BjoernThe list of C++11 features supported by Arm Compiler 5 is listed here.
https://developer.arm.com/documentation/dui0472/m/c-and-c---implementation-details/c--11-supported-features?lang=en
v5.06 is the latest and final release of Arm Compiler 5. It has been greatly superseded by Arm Compiler 6, which has itself moved on significantly from Paul's original reply above (current version is 6.15, latest version at time of Paul's reply was 6.7). I would _strongly_ recommend you move to this compiler, especially if you are working with C++. Implementation documentation is provided below
https://developer.arm.com/documentation/101754/0615/Appendixes/Standard-C---Implementation-Definition?lang=en