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. Not every single combination of
compiler/IDE/device/library template have been, or can realistically be,  checked. A set of profiles have been created
for the most popular setups.
If you have issues porting the library to your platform then contact me, and I will do my best to resolve any

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.

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  either one must be acquired or the project is compiled with ETL_NO_STL
A suitable STL 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.

The alternative option is to compile with ETL_NO_STL defined, if the STL is not used in your project.

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 reither enamed or the include path
somehow altered, as the platform also defines  a header named variant.h.

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