C++14 Support for ARM and MSP Compilers

As of compiler release version 18.1.0.LTS, the Texas Instruments ARM and MSP430 compilers support the C++14 version of the C++ standard. (ISO/IEC 14882:2014)

However, some language features are currently unsupported.

  • Concurrency (e.g.: std::thread, std::atomic, and associated helpers)
  • New character types (e.g.: Header files: uchar.h and cuchar)
  • Unicode string literals (e.g.: U"string", u"string", u8"string")
  • Universal character names in literals (e.g.: "\u0123")

The standard library used to implement many of C++'s features has been changed to LLVM's libc++. (link) While modified by TI, library support most closely resembles that of libc++ 5.0.1.

Supported compilers default to and only support C++14 mode for compilation of C++ source files. C++14 object files are incompatible with C++03 object files. C compatibility is not affected by this change.

While most C++03 should compile without a problem, there are a couple of incompatibilities at the language level you might encounter while recompiling your old C++ source code:

New Keywords

  • alignas
  • alignof
  • char16_t
  • char32_t
  • constexpr
  • decltype
  • noexcept
  • nullptr
  • static_assert
  • thread_local

Repurposed or deprecated keywords

  • auto is no longer a storage class specifier, but has been repurposed as a type specifier
  • register has been deprecated and will be removed in a later version

Aggregate initialization no longer allows narrowing conversions

    int x[] = { 2.0 }; // Previously compiled, but now results in a syntax error

New literal prefixes and suffixes could cause macro replacement to fail

    #define u8 "abc"
    const char *s1 = u8"def"; // Previously "abcdef", now "def"
    #define _x  "there"
    const char *s2 = "hello "_x; // Previously "hello there", now a syntax error