Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define xbt::type_identity_t (similar to C++20's std::type_identity_t).
[simgrid.git] / include / xbt / utility.hpp
index d0d7302..0345806 100644 (file)
@@ -10,6 +10,7 @@
 #include <array>
 #include <functional>
 #include <tuple>
+#include <type_traits>
 #include <xbt/base.h>
 
 /** @brief Helper macro to declare enum class
 namespace simgrid {
 namespace xbt {
 
+/** @brief Replacement for C++20's std::type_identity_t
+ */
+#if __cplusplus >= 201806L // __cpp_lib_type_identity
+template <class T> using type_identity_t = typename std::type_identity_t<T>;
+#else
+template <class T> struct type_identity {
+  using type = T;
+};
+
+template <class T> using type_identity_t = typename type_identity<T>::type;
+#endif
+
 /** @brief A hash which works with more stuff
  *
  *  It can hash pairs: the standard hash currently doesn't include this.