A C++ template library for embedded applications
Designed and maintained by
Aster Consulting Ltd
MIT licensed
Join the ETL community


The library is intended to be used on multiple platforms and devices and attempts to detect the compiler type and
version to accommodate any differences. Not every single combination of compiler/IDE/device/library template have
been, or can realistically be,  checked. If you have issues porting the library to your platform then contact me, and I
will do my best to resolve any incompatibilities.

If you have no issues, or have solved it by yourself then please let me know so that I may add information about it to
this page.

I can be contacted here.

It is intended to be compatible with devices that do not natively support 8 bit types.

Visual Studio

Has been compiled under VS2015 & VS2017.
No known issues.


Has been compiled under GNU GCC  on Windows & Linux.
No known issues, apart from early versions of GCC that may need to define the macro __STDC_LIMIT_MACROS in the
project properties.

Keil uVision


Define the macro __STDC_LIMIT_MACROS in the project properties.
Compiled with version 5 & 6 ARM compilers.
No known issues.

TI Code Composer


Define the macro __STDC_LIMIT_MACROS in the project properties.
No known issues.

IAR Embedded Workbench


Define the macro __STDC_LIMIT_MACROS in the project properties.
No known issues.

Segger Embedded Studio


If using STLPort then the macro ETL_STLPORT must be defined in the profile..


Arduino IDE

Visual Studio with Visual Micro extension

The Arduino programming platform is not supplied with an implementation of the STL. The ETL requires some parts
of the STL to compile and therefore one must be acquired. A suitable implementation may be downloaded from the
Arduino library resource; It is called ArduinoSTL.
Add #include <ArduinoSTL.h> to the start of every file that uses the ETL.
Remember to add the directory to the include path.

Partially tested for Zero, Uno, Yún, Mega, Industrial 101 and Leonardo boards using test_embedded_compile.cpp


<algorithm> must be edited to move the template function iter_swap before the declaration of swap_ranges.
The template class variant will not currently compile unless the header file is renamed. Why?!

Fails to find ArduinoSTL.h even though it is present.
If ArduinoSTL.h is removed, then fails with printf has not been declared.

It may be necessary to add the following lines to the beginning of the file.
#undef min
#undef max