# 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](https://libcxx.llvm.org/)) 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
```cpp
int x[] = { 2.0 }; // Previously compiled, but now results in a syntax error
```
## New literal prefixes and suffixes could cause macro replacement to fail
```cpp
#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
```