The problem is that ETL will use the SYSTEM CMake keyword, which for some GCC compilers (like mine; there is some claims that it is specific to the ARM compilers...) will implicitly wrap the headers with extern "C"
. Fortunately it provides a NO_SYSTEM_INCLUDE
option that you can turn off to NOT use the SYSTEM keyword, which turns off this GCC behavior.
https://github.com/ETLCPP/etl/blob/master/CMakeLists.txt#L21