diff options
author | Stephan Dollberg <stephan.dollberg@gmail.com> | 2018-05-01 20:32:31 +0100 |
---|---|---|
committer | Anna Gringauze <annagrin@microsoft.com> | 2018-05-01 12:32:31 -0700 |
commit | d6b26b367b294aca43ff2d28c50293886ad1d5d4 (patch) | |
tree | 5670d025f79778191f2780e8171505f7c7673411 | |
parent | c4c1f6395a613167b5d935df05bef04370bdb548 (diff) | |
download | platform_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
-rw-r--r-- | include/gsl/gsl_byte | 9 |
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 { }; |