update ArxTypeTraits
This commit is contained in:
parent
4d7678dd9b
commit
532bcf9fbb
@ -15,12 +15,12 @@ namespace std { }
|
||||
|
||||
// Import everything from the std namespace into arx::std, so that
|
||||
// anything we import rather than define is also available through
|
||||
// arx::arx_std.
|
||||
// arx::stdx.
|
||||
// This includes everything yet to be defined, so we can do this early
|
||||
// (and must do so, to allow e.g. the C++14 additions in the arx::std
|
||||
// namespace to reference the C++11 stuff from the system headers.
|
||||
namespace arx {
|
||||
namespace arx_std {
|
||||
namespace stdx {
|
||||
using namespace ::std;
|
||||
}
|
||||
}
|
||||
@ -30,9 +30,9 @@ namespace arx {
|
||||
// the standard library version if it is available, falling back to arx
|
||||
// versions for things not supplied by the standard library. Only when
|
||||
// you really need the arx version (e.g. for constexpr numeric_limits
|
||||
// when also using ArduinoSTL), you need to qualify with arx::arx_std::
|
||||
// when also using ArduinoSTL), you need to qualify with arx::stdx::
|
||||
namespace std {
|
||||
using namespace ::arx::arx_std;
|
||||
using namespace ::arx::stdx;
|
||||
}
|
||||
|
||||
#include "ArxTypeTraits/replace_minmax_macros.h"
|
||||
|
@ -28,7 +28,7 @@
|
||||
inline void* operator new (const size_t size, void* ptr) noexcept { (void)size; return ptr; }
|
||||
#endif
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
// reference:
|
||||
// stack overflow https://stackoverflow.com/questions/32074410/stdfunction-bind-like-type-erasure-without-standard-c-library
|
||||
|
@ -17,7 +17,8 @@
|
||||
#define ARX_SYSTEM_HAS_INCLUDE(x) 1
|
||||
#elif defined(ARDUINO_SAM_DUE)
|
||||
// Arduino DUE's GCC version is 4.8.3 (GCC < 5.0).
|
||||
// And it has not libstdc++
|
||||
// If libstdc++ is used, std::function causes error
|
||||
// so currently we disable libstdc++ and use ArxTypeTraits
|
||||
#define ARX_SYSTEM_HAS_INCLUDE(x) 0
|
||||
#else
|
||||
#error "Compiler does not support __has_include, please report a bug against the ArxTypeTraits library about this."
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#else // Do not have libstdc++11
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
// https://theolizer.com/cpp-school2/cpp-school2-15/
|
||||
// https://wandbox.org/permlink/C0BWIzjqg4iO3kKZ
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#else // Do not have libstdc++98
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
template <class T>
|
||||
void swap(T& a, T& b)
|
||||
@ -18,7 +18,7 @@ namespace arx { namespace arx_std {
|
||||
a = move(b);
|
||||
b = move(t);
|
||||
}
|
||||
} } // namespace arx::arx_std
|
||||
} } // namespace arx::stdx
|
||||
|
||||
#endif // Do not have libstdc++98
|
||||
|
||||
@ -34,7 +34,7 @@ namespace arx { namespace arx_std {
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
using nullptr_t = decltype(nullptr);
|
||||
|
||||
@ -145,10 +145,6 @@ namespace arx { namespace arx_std {
|
||||
template<class T, size_t N> struct remove_extent<T[N]> { typedef T type; };
|
||||
|
||||
|
||||
template<class T>
|
||||
T&& move(T& t){ return static_cast<T&&>(t); }
|
||||
|
||||
|
||||
template <class T>
|
||||
constexpr T&& forward(typename remove_reference<T>::type& t) noexcept
|
||||
{
|
||||
@ -381,10 +377,31 @@ namespace arx { namespace arx_std {
|
||||
template<class Sig>
|
||||
using result_of = details::result_of<Sig>;
|
||||
|
||||
} } // namespace arx::arx_std
|
||||
} } // namespace arx::stdx
|
||||
|
||||
#endif // Do not have libstdc++11
|
||||
|
||||
|
||||
#if ARX_HAVE_LIBSTDCPLUSPLUS >= 201402L // Have libstdc++14
|
||||
|
||||
#else // Do not have libstdc++14
|
||||
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
// `move` must be declared before including `functional.h`
|
||||
// C++14 constexpr version should be inside of C++14,
|
||||
// but moved before `functional.h`
|
||||
template <class T>
|
||||
constexpr typename remove_reference<T>::type&& move(T&& t) noexcept
|
||||
{
|
||||
return static_cast<typename remove_reference<T>::type&&>(t);
|
||||
}
|
||||
|
||||
} } // namespace arx::stdx
|
||||
|
||||
#endif // Do not have libstdc++14
|
||||
|
||||
|
||||
#include "initializer_list.h"
|
||||
#include "tuple.h"
|
||||
#include "functional.h"
|
||||
@ -394,7 +411,7 @@ namespace arx { namespace arx_std {
|
||||
// for C++11 above.
|
||||
#else // Do not have libstdc++14
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
template <bool B, typename T = void>
|
||||
using enable_if_t = typename enable_if<B, T>::type;
|
||||
@ -448,7 +465,7 @@ namespace arx { namespace arx_std {
|
||||
template<typename... Ts>
|
||||
using index_sequence_for = make_index_sequence<sizeof...(Ts)>;
|
||||
|
||||
} } // namespace arx::arx_std
|
||||
} } // namespace arx::stdx
|
||||
|
||||
#endif // Do not have libstdc++14
|
||||
|
||||
@ -458,7 +475,7 @@ namespace arx { namespace arx_std {
|
||||
// for C++11 above.
|
||||
#else // Do not have libstdc++17
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
template <class... Ts>
|
||||
struct Tester { using type = void; };
|
||||
@ -506,7 +523,7 @@ namespace arx { namespace arx_std {
|
||||
);
|
||||
}
|
||||
|
||||
} } // namespace arx::arx_std
|
||||
} } // namespace arx::stdx
|
||||
|
||||
#endif // Do not have libstdc++17
|
||||
|
||||
@ -516,7 +533,7 @@ namespace arx { namespace arx_std {
|
||||
// for C++11 above.
|
||||
#else // Do not have libstdc++2a
|
||||
|
||||
namespace arx { namespace arx_std {
|
||||
namespace arx { namespace stdx {
|
||||
|
||||
template<class T>
|
||||
struct remove_cvref
|
||||
@ -527,7 +544,7 @@ namespace arx { namespace arx_std {
|
||||
template< class T >
|
||||
using remove_cvref_t = typename remove_cvref<T>::type;
|
||||
|
||||
} } // namespace arx::arx_std
|
||||
} } // namespace arx::stdx
|
||||
#endif // Do not have libstdc++2a
|
||||
|
||||
|
||||
|
@ -8,13 +8,13 @@ C++ type_traits for Arduino which cannot use it as default
|
||||
- automatically use standard library first if the boards can
|
||||
- if standard library is not enough (e.g. only C++11 is available), add missing parts listed below
|
||||
- works almost all Arduino platforms (Let me know if you have errors)
|
||||
- compatible with [ArduinoSTL](https://github.com/mike-matera/ArduinoSTL) or other [uClibc++](https://www.uclibc.org/) libraries (include them before `ArxTypeTraits`)
|
||||
- compatible with [ArduinoSTL](https://github.com/mike-matera/ArduinoSTL) or other [uClibc++](https://www.uclibc.org/) libraries
|
||||
- thx @matthijskooijman
|
||||
|
||||
|
||||
## Supported Class Templates
|
||||
|
||||
### C++11 (defined only for platforms above which cannot use `type_traits`)
|
||||
### C++11 (defined only for boards before C++11)
|
||||
|
||||
- `std::integral_constant`
|
||||
- `std::true_type`
|
||||
@ -102,6 +102,7 @@ C++ type_traits for Arduino which cannot use it as default
|
||||
- [PollingTimer](https://github.com/hideakitai/PollingTimer)
|
||||
- [Tween](https://github.com/hideakitai/Tween)
|
||||
- [ArxStringUtils](https://github.com/hideakitai/ArxStringUtils)
|
||||
- [Filters](https://github.com/hideakitai/Filters)
|
||||
|
||||
|
||||
## Contributors
|
||||
|
Loading…
Reference in New Issue
Block a user