From 941c631a5ff3deb3fc73f2d0c44738e2c36d885f Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Mon, 11 Jul 2022 16:05:42 +0200 Subject: [PATCH] Downgrade for old compiler --- CMakeLists.txt | 1 + src/espstrutils.cpp | 1 + src/futurecpp.h | 30 ++++++++++++++++++++++++++++++ src/taskutils.cpp | 3 +++ src/wrappers/websocket_client.h | 1 + 5 files changed, 36 insertions(+) create mode 100644 src/futurecpp.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 53b3c49..44c3251 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ set(headers src/espcrc32builder.h src/esprandom.h src/espstrutils.h + src/futurecpp.h src/lockhelper.h src/lockingqueue.h src/recursivelockhelper.h diff --git a/src/espstrutils.cpp b/src/espstrutils.cpp index 684689a..a0a0b88 100644 --- a/src/espstrutils.cpp +++ b/src/espstrutils.cpp @@ -10,6 +10,7 @@ #include // 3rdparty lib includes +#include #include using namespace std::string_literals; diff --git a/src/futurecpp.h b/src/futurecpp.h new file mode 100644 index 0000000..b67578c --- /dev/null +++ b/src/futurecpp.h @@ -0,0 +1,30 @@ +#pragma once + +// system includes +#include +#include +#include + +// C++20 backports (until espressif finally updates their aged compiler suite) + +namespace std { +template +typename std::enable_if_t< + sizeof(To) == sizeof(From) && std::is_trivially_copyable_v && std::is_trivially_copyable_v, + To> +// constexpr support needs compiler magic +bit_cast(const From& src) noexcept +{ + static_assert(std::is_trivially_constructible_v, + "This implementation additionally requires destination type to be trivially constructible"); + + To dst; + std::memcpy(&dst, &src, sizeof(To)); + return dst; +} + +template {}>> +constexpr std::underlying_type_t to_underlying(EnumT e) noexcept { + return static_cast>(e); +} +} // namespace std diff --git a/src/taskutils.cpp b/src/taskutils.cpp index f4f0ae8..daaf29c 100644 --- a/src/taskutils.cpp +++ b/src/taskutils.cpp @@ -9,6 +9,9 @@ // esp-idf includes #include +// 3rdparty lib includes +#include + namespace espcpputils { namespace { constexpr const char * const TAG = "ESPCPPUTILS"; diff --git a/src/wrappers/websocket_client.h b/src/wrappers/websocket_client.h index 49582cd..163cb3d 100644 --- a/src/wrappers/websocket_client.h +++ b/src/wrappers/websocket_client.h @@ -11,6 +11,7 @@ // 3rdparty lib includes #include +#include namespace espcpputils { class websocket_client