X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fmacros.hpp;h=42f7a94d14648a35c6f84a1843fcb1db2de624c0;hb=332a2147fece4548eac38a0929b208230a8da31f;hp=b734652eea9ea89218d7e798edabed46fe272e73;hpb=a8e336c2b57ff1e38f2a511aab8c2c6060c1796d;p=lttng-tools.git diff --git a/src/common/macros.hpp b/src/common/macros.hpp index b734652ee..42f7a94d1 100644 --- a/src/common/macros.hpp +++ b/src/common/macros.hpp @@ -63,7 +63,19 @@ void *zmalloc_internal(size_t size) template struct can_malloc { + /* + * gcc versions before 5.0 lack some type traits defined in C++11. + * Since in this instance we use the trait to prevent misuses + * of malloc (and statically assert) and not to generate different + * code based on this property, simply set value to true and allow + * the code to compile. Anyone using a contemporary compiler will + * catch the error. + */ +#if __GNUG__ && __GNUC__ < 5 + static constexpr bool value = true; +#else static constexpr bool value = std::is_trivially_constructible::value; +#endif }; /* @@ -138,7 +150,19 @@ T *malloc(size_t size) template struct can_free { + /* + * gcc versions before 5.0 lack some type traits defined in C++11. + * Since in this instance we use the trait to prevent misuses + * of free (and statically assert) and not to generate different + * code based on this property, simply set value to true and allow + * the code to compile. Anyone using a contemporary compiler will + * catch the error. + */ +#if __GNUG__ && __GNUC__ < 5 + static constexpr bool value = true; +#else static constexpr bool value = std::is_trivially_destructible::value || std::is_void::value; +#endif }; template::value>::type> @@ -156,7 +180,19 @@ void *memset(T *s, int c, size_t n) = delete; template struct can_memcpy { + /* + * gcc versions before 5.0 lack some type traits defined in C++11. + * Since in this instance we use the trait to prevent misuses + * of memcpy (and statically assert) and not to generate different + * code based on this property, simply set value to true and allow + * the code to compile. Anyone using a contemporary compiler will + * catch the error. + */ +#if __GNUG__ && __GNUC__ < 5 + static constexpr bool value = true; +#else static constexpr bool value = std::is_trivially_copyable::value; +#endif }; template struct can_memmove { + /* + * gcc versions before 5.0 lack some type traits defined in C++11. + * Since in this instance we use the trait to prevent misuses + * of memmove (and statically assert) and not to generate different + * code based on this property, simply set value to true and allow + * the code to compile. Anyone using a contemporary compiler will + * catch the error. + */ +#if __GNUG__ && __GNUC__ < 5 + static constexpr bool value = true; +#else static constexpr bool value = std::is_trivially_copyable::value; +#endif }; template