X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fmacros.hpp;h=a4ff6504d078807056330c4fd8f3e25b3a05f2ad;hp=b734652eea9ea89218d7e798edabed46fe272e73;hb=f12e33ba4926d519a81baa388384fc54afde3985;hpb=c56f67e5d0844c92823c7c9aa1a1222cf6daf22a diff --git a/src/common/macros.hpp b/src/common/macros.hpp index b734652ee..a4ff6504d 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