mirror of
https://github.com/microsoft/GSL.git
synced 2025-01-18 09:44:59 -05:00
Better use of std::enable_if (#1177)
Some checks failed
CI_Android / Android (push) Has been cancelled
cmake_find_package / Build ${{ matrix.os }} (macos-latest) (push) Has been cancelled
cmake_find_package / Build ${{ matrix.os }} (ubuntu-latest) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 20, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 20, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 23, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 20, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 20, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 23, 11) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 23) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 14, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 17, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 20, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 23, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 14, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 17, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 20, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 23, 15.4) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 23, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 23, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 23, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 23, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
CI_iOS / iOS (push) Has been cancelled
Some checks failed
CI_Android / Android (push) Has been cancelled
cmake_find_package / Build ${{ matrix.os }} (macos-latest) (push) Has been cancelled
cmake_find_package / Build ${{ matrix.os }} (ubuntu-latest) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 14, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 17, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 20, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 20, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Debug, 23, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 14, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 17, 12) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 20, 10) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 20, 11) (push) Has been cancelled
Compiler Integration Tests / gcc (Release, 23, 11) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 13, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 14, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Debug, 15, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 13, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 14, 23) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 14) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 17) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 20) (push) Has been cancelled
Compiler Integration Tests / clang (Release, 15, 23) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 14, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 17, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 20, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Debug, 23, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 14, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 17, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 20, 15.4) (push) Has been cancelled
Compiler Integration Tests / xcode (Release, 23, 15.4) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 14, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 17, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 20, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 23, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Debug, 23, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 14, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 17, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, , Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, -T ClangCL, Visual Studio 16 2019, windows-2019) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 20, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 23, , Visual Studio 17 2022, windows-2022) (push) Has been cancelled
Compiler Integration Tests / VisualStudio (Release, 23, -T ClangCL, Visual Studio 17 2022, windows-2022) (push) Has been cancelled
CI_iOS / iOS (push) Has been cancelled
* this commits adds tests that should fail, but don't * Better use of std::enable_if Replace the occurances of `class = std::enable_if_t<Cond>` and `typename = std::enable_if_t<Cond>` that have been identified in the previous commit with `std::enable_if_t<Cond, bool> = true`. This commit is inspired by #1174, which changed one occurance in the owner header. This commit is aimed to fix all remaining occurances. * fix failing checks - core.cxx_gsl aktualisiert auf [](https://gitlab.avm.de/fos/repos/core.cxx_gsl/-/commit/) - plc.access_lib aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.access_lib/-/commit/) - plc.common aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.common/-/commit/) - plc.daemon aktualisiert auf [](https://gitlab.avm.de/fos/repos/plc.daemon/-/commit/) - Test Plan: - --------- Co-authored-by: Werner Henze <werner.henze+gitcommits@posteo.de> Co-authored-by: Werner Henze <w.henze@avm.de>
This commit is contained in:
parent
b8ac820fe1
commit
fcd55ee924
@ -91,16 +91,16 @@ See [SL.str.5: Use `std::byte` to refer to byte values that do not necessarily r
|
|||||||
### Non-member functions
|
### Non-member functions
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept;
|
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept;
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte operator<<(byte b, IntegerType shift) noexcept;
|
constexpr byte operator<<(byte b, IntegerType shift) noexcept;
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept;
|
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept;
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte operator>>(byte b, IntegerType shift) noexcept;
|
constexpr byte operator>>(byte b, IntegerType shift) noexcept;
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ constexpr byte operator~(byte b) noexcept;
|
|||||||
Bitwise negation of a `byte`. Flips all bits. Zeroes become ones, ones become zeroes.
|
Bitwise negation of a `byte`. Flips all bits. Zeroes become ones, ones become zeroes.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr IntegerType to_integer(byte b) noexcept;
|
constexpr IntegerType to_integer(byte b) noexcept;
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ auto make_not_null(T&& t) noexcept;
|
|||||||
Creates a `gsl::not_null` object, deducing the target type from the type of the argument.
|
Creates a `gsl::not_null` object, deducing the target type from the type of the argument.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
template <typename T, typename = std::enable_if_t<std::is_move_assignable<T>::value && std::is_move_constructible<T>::value>>
|
template <typename T, std::enable_if_t<std::is_move_assignable<T>::value && std::is_move_constructible<T>::value, bool> = true>
|
||||||
void swap(not_null<T>& a, not_null<T>& b);
|
void swap(not_null<T>& a, not_null<T>& b);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -91,25 +91,25 @@ enum class byte_may_alias byte : unsigned char
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept
|
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept
|
||||||
{
|
{
|
||||||
return b = byte(static_cast<unsigned char>(b) << shift);
|
return b = byte(static_cast<unsigned char>(b) << shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte operator<<(byte b, IntegerType shift) noexcept
|
constexpr byte operator<<(byte b, IntegerType shift) noexcept
|
||||||
{
|
{
|
||||||
return byte(static_cast<unsigned char>(b) << shift);
|
return byte(static_cast<unsigned char>(b) << shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept
|
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept
|
||||||
{
|
{
|
||||||
return b = byte(static_cast<unsigned char>(b) >> shift);
|
return b = byte(static_cast<unsigned char>(b) >> shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr byte operator>>(byte b, IntegerType shift) noexcept
|
constexpr byte operator>>(byte b, IntegerType shift) noexcept
|
||||||
{
|
{
|
||||||
return byte(static_cast<unsigned char>(b) >> shift);
|
return byte(static_cast<unsigned char>(b) >> shift);
|
||||||
@ -147,7 +147,7 @@ constexpr byte operator^(byte l, byte r) noexcept
|
|||||||
|
|
||||||
constexpr byte operator~(byte b) noexcept { return byte(~static_cast<unsigned char>(b)); }
|
constexpr byte operator~(byte b) noexcept { return byte(~static_cast<unsigned char>(b)); }
|
||||||
|
|
||||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
template <class IntegerType, std::enable_if_t<std::is_integral<IntegerType>::value, bool> = true>
|
||||||
constexpr IntegerType to_integer(byte b) noexcept
|
constexpr IntegerType to_integer(byte b) noexcept
|
||||||
{
|
{
|
||||||
return static_cast<IntegerType>(b);
|
return static_cast<IntegerType>(b);
|
||||||
|
@ -145,7 +145,7 @@ private:
|
|||||||
T ptr_;
|
T ptr_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename = std::enable_if_t<std::is_move_assignable<T>::value && std::is_move_constructible<T>::value>>
|
template <typename T, std::enable_if_t<std::is_move_assignable<T>::value && std::is_move_constructible<T>::value, bool> = true>
|
||||||
void swap(not_null<T>& a, not_null<T>& b)
|
void swap(not_null<T>& a, not_null<T>& b)
|
||||||
{
|
{
|
||||||
a.swap(b);
|
a.swap(b);
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
#define GSL_USE_STD_BYTE 0
|
#define GSL_USE_STD_BYTE 0
|
||||||
#include <gsl/byte> // for to_byte, to_integer, byte, operator&, ope...
|
#include <gsl/byte> // for to_byte, to_integer, byte, operator&, ope...
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace gsl;
|
using namespace gsl;
|
||||||
|
|
||||||
@ -128,6 +131,48 @@ TEST(byte_tests, aliasing)
|
|||||||
EXPECT_TRUE(res == i);
|
EXPECT_TRUE(res == i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __cplusplus >= 201703l
|
||||||
|
using std::void_t;
|
||||||
|
#else // __cplusplus >= 201703l
|
||||||
|
template <class...>
|
||||||
|
using void_t = void;
|
||||||
|
#endif // __cplusplus < 201703l
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool LShiftCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool LShiftCompilesFor<
|
||||||
|
U, void_t<decltype(gsl::operator<< <float>(declval<gsl::byte>(), declval<U>()))>> = true;
|
||||||
|
static_assert(!LShiftCompilesFor<float>, "!LShiftCompilesFor<float>");
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool RShiftCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool RShiftCompilesFor<
|
||||||
|
U, void_t<decltype(gsl::operator>> <U>(declval<gsl::byte>(), declval<U>()))>> = true;
|
||||||
|
static_assert(!RShiftCompilesFor<float>, "!RShiftCompilesFor<float>");
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool LShiftAssignCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool LShiftAssignCompilesFor<
|
||||||
|
U, void_t<decltype(gsl::operator<<= <U>(declval<gsl::byte&>(), declval<U>()))>> = true;
|
||||||
|
static_assert(!LShiftAssignCompilesFor<float>, "!LShiftAssignCompilesFor<float>");
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool RShiftAssignCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool RShiftAssignCompilesFor<
|
||||||
|
U, void_t<decltype(gsl::operator>>= <U>(declval<gsl::byte&>(), declval<U>()))>> = true;
|
||||||
|
static_assert(!RShiftAssignCompilesFor<float>, "!RShiftAssignCompilesFor<float>");
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool ToIntegerCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool
|
||||||
|
ToIntegerCompilesFor<U, void_t<decltype(gsl::to_integer<U>(gsl::byte{}))>> = true;
|
||||||
|
static_assert(!ToIntegerCompilesFor<float>, "!ToIntegerCompilesFor<float>");
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||||
|
@ -3,6 +3,24 @@
|
|||||||
#include <gsl/pointers>
|
#include <gsl/pointers>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <type_traits>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// Custom pointer type that can be used for gsl::not_null, but for which these cannot be swapped.
|
||||||
|
struct NotMoveAssignableCustomPtr
|
||||||
|
{
|
||||||
|
NotMoveAssignableCustomPtr() = default;
|
||||||
|
NotMoveAssignableCustomPtr(const NotMoveAssignableCustomPtr&) = default;
|
||||||
|
NotMoveAssignableCustomPtr& operator=(const NotMoveAssignableCustomPtr&) = default;
|
||||||
|
NotMoveAssignableCustomPtr(NotMoveAssignableCustomPtr&&) = default;
|
||||||
|
NotMoveAssignableCustomPtr& operator=(NotMoveAssignableCustomPtr&&) = delete;
|
||||||
|
|
||||||
|
bool operator!=(std::nullptr_t) const { return true; }
|
||||||
|
|
||||||
|
int dummy{}; // Without this clang warns, that NotMoveAssignableCustomPtr() is unneeded
|
||||||
|
};
|
||||||
|
|
||||||
TEST(pointers_test, swap)
|
TEST(pointers_test, swap)
|
||||||
{
|
{
|
||||||
@ -17,5 +35,28 @@ TEST(pointers_test, swap)
|
|||||||
|
|
||||||
EXPECT_TRUE(*a == 1);
|
EXPECT_TRUE(*a == 1);
|
||||||
EXPECT_TRUE(*b == 0);
|
EXPECT_TRUE(*b == 0);
|
||||||
|
|
||||||
|
// Make sure our custom ptr can be used with not_null. The shared_pr is to prevent "unused"
|
||||||
|
// compiler warnings.
|
||||||
|
const auto shared_custom_ptr{std::make_shared<NotMoveAssignableCustomPtr>()};
|
||||||
|
gsl::not_null<NotMoveAssignableCustomPtr> c{*shared_custom_ptr};
|
||||||
|
EXPECT_TRUE(c.get() != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __cplusplus >= 201703l
|
||||||
|
using std::void_t;
|
||||||
|
#else // __cplusplus >= 201703l
|
||||||
|
template <class...>
|
||||||
|
using void_t = void;
|
||||||
|
#endif // __cplusplus < 201703l
|
||||||
|
|
||||||
|
template <typename U, typename = void>
|
||||||
|
static constexpr bool SwapCompilesFor = false;
|
||||||
|
template <typename U>
|
||||||
|
static constexpr bool
|
||||||
|
SwapCompilesFor<U, void_t<decltype(gsl::swap<U>(std::declval<gsl::not_null<U>&>(),
|
||||||
|
std::declval<gsl::not_null<U>&>()))>> = true;
|
||||||
|
static_assert(!SwapCompilesFor<NotMoveAssignableCustomPtr>,
|
||||||
|
"!SwapCompilesFor<NotMoveAssignableCustomPtr>");
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
@ -1005,12 +1005,18 @@ static_assert(std::is_convertible<const std::array<int, 3>&, gsl::span<const int
|
|||||||
"std::is_convertible<const std::array<int, 3>&, gsl::span<const int>>");
|
"std::is_convertible<const std::array<int, 3>&, gsl::span<const int>>");
|
||||||
|
|
||||||
#if __cplusplus >= 201703l
|
#if __cplusplus >= 201703l
|
||||||
|
using std::void_t;
|
||||||
|
#else // __cplusplus >= 201703l
|
||||||
|
template <class...>
|
||||||
|
using void_t = void;
|
||||||
|
#endif // __cplusplus < 201703l
|
||||||
|
|
||||||
template <typename U, typename = void>
|
template <typename U, typename = void>
|
||||||
static constexpr bool AsWritableBytesCompilesFor = false;
|
static constexpr bool AsWritableBytesCompilesFor = false;
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
static constexpr bool
|
static constexpr bool
|
||||||
AsWritableBytesCompilesFor<U, void_t<decltype(as_writable_bytes(declval<U>()))>> = true;
|
AsWritableBytesCompilesFor<U, ::void_t<decltype(as_writable_bytes(declval<U>()))>> = true;
|
||||||
|
|
||||||
static_assert(AsWritableBytesCompilesFor<gsl::span<int>>,
|
static_assert(AsWritableBytesCompilesFor<gsl::span<int>>,
|
||||||
"AsWritableBytesCompilesFor<gsl::span<int>>");
|
"AsWritableBytesCompilesFor<gsl::span<int>>");
|
||||||
@ -1020,4 +1026,3 @@ static_assert(!AsWritableBytesCompilesFor<gsl::span<const int>>,
|
|||||||
"!AsWritableBytesCompilesFor<gsl::span<const int>>");
|
"!AsWritableBytesCompilesFor<gsl::span<const int>>");
|
||||||
static_assert(!AsWritableBytesCompilesFor<gsl::span<const int, 9>>,
|
static_assert(!AsWritableBytesCompilesFor<gsl::span<const int, 9>>,
|
||||||
"!AsWritableBytesCompilesFor<gsl::span<const int, 9>>");
|
"!AsWritableBytesCompilesFor<gsl::span<const int, 9>>");
|
||||||
#endif // __cplusplus >= 201703l
|
|
||||||
|
Loading…
Reference in New Issue
Block a user