aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorStephan Dollberg <stephan.dollberg@gmail.com>2018-05-01 20:32:31 +0100
committerAnna Gringauze <annagrin@microsoft.com>2018-05-01 12:32:31 -0700
commitd6b26b367b294aca43ff2d28c50293886ad1d5d4 (patch)
tree5670d025f79778191f2780e8171505f7c7673411 /include
parentc4c1f6395a613167b5d935df05bef04370bdb548 (diff)
downloadplatform_external_Microsoft-GSL-d6b26b367b294aca43ff2d28c50293886ad1d5d4.tar.gz
platform_external_Microsoft-GSL-d6b26b367b294aca43ff2d28c50293886ad1d5d4.tar.bz2
platform_external_Microsoft-GSL-d6b26b367b294aca43ff2d28c50293886ad1d5d4.zip
Add __may_alias__ attribute to gsl::byte (#668)
C++17 defines `std::byte*` to have the same aliasing properties as `char*`. Hence, we mark it with the `__may_alias__` attribute under gcc and clang. Based on the fix by Martin Moene in byte-lite. Fixes #663
Diffstat (limited to 'include')
-rw-r--r--include/gsl/gsl_byte9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/gsl/gsl_byte b/include/gsl/gsl_byte
index 5da9a86..e861173 100644
--- a/include/gsl/gsl_byte
+++ b/include/gsl/gsl_byte
@@ -57,6 +57,13 @@
#endif // _MSC_VER
+// Use __may_alias__ attribute on gcc and clang
+#if defined __clang__ || (__GNUC__ > 5)
+#define byte_may_alias __attribute__((__may_alias__))
+#else // defined __clang__ || defined __GNUC__
+#define byte_may_alias
+#endif // defined __clang__ || defined __GNUC__
+
namespace gsl
{
#if GSL_USE_STD_BYTE
@@ -69,7 +76,7 @@ using std::to_integer;
// This is a simple definition for now that allows
// use of byte within span<> to be standards-compliant
-enum class byte : unsigned char
+enum class byte_may_alias byte : unsigned char
{
};