Workaround a msvc bug affecting msvc 19.38
This commit is contained in:
parent
ab389c36bd
commit
6db9794dc6
@ -363,19 +363,23 @@ namespace detail {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename T,
|
typename T,
|
||||||
typename D,
|
typename D
|
||||||
typename std::enable_if<
|
// workaround a msvc bug https://developercommunity.visualstudio.com/t/MSVC-1938331290-preview-fails-to-comp/10505565
|
||||||
std::is_same<decltype(std::declval<D>()(std::declval<T>())), void>::value,
|
#if _MSC_VER != 1938
|
||||||
int
|
,
|
||||||
>::type = 0,
|
typename std::enable_if<
|
||||||
typename std::enable_if<
|
std::is_same<decltype(std::declval<D>()(std::declval<T>())), void>::value,
|
||||||
std::is_standard_layout<T>::value && std::is_trivial<T>::value,
|
int
|
||||||
int
|
>::type = 0,
|
||||||
>::type = 0,
|
typename std::enable_if<
|
||||||
typename std::enable_if<
|
std::is_standard_layout<T>::value && std::is_trivial<T>::value,
|
||||||
std::is_nothrow_move_constructible<T>::value,
|
int
|
||||||
int
|
>::type = 0,
|
||||||
>::type = 0
|
typename std::enable_if<
|
||||||
|
std::is_nothrow_move_constructible<T>::value,
|
||||||
|
int
|
||||||
|
>::type = 0
|
||||||
|
#endif
|
||||||
>
|
>
|
||||||
class raii_wrapper {
|
class raii_wrapper {
|
||||||
T obj;
|
T obj;
|
||||||
@ -409,15 +413,19 @@ namespace detail {
|
|||||||
|
|
||||||
template<
|
template<
|
||||||
typename T,
|
typename T,
|
||||||
typename D,
|
typename D
|
||||||
typename std::enable_if<
|
// workaround a msvc bug https://developercommunity.visualstudio.com/t/MSVC-1938331290-preview-fails-to-comp/10505565
|
||||||
std::is_same<decltype(std::declval<D>()(std::declval<T>())), void>::value,
|
#if _MSC_VER != 1938
|
||||||
int
|
,
|
||||||
>::type = 0,
|
typename std::enable_if<
|
||||||
typename std::enable_if<
|
std::is_same<decltype(std::declval<D>()(std::declval<T>())), void>::value,
|
||||||
std::is_standard_layout<T>::value && std::is_trivial<T>::value,
|
int
|
||||||
int
|
>::type = 0,
|
||||||
>::type = 0
|
typename std::enable_if<
|
||||||
|
std::is_standard_layout<T>::value && std::is_trivial<T>::value,
|
||||||
|
int
|
||||||
|
>::type = 0
|
||||||
|
#endif
|
||||||
>
|
>
|
||||||
raii_wrapper<typename std::remove_reference<T>::type, D> raii_wrap(T obj, D deleter) {
|
raii_wrapper<typename std::remove_reference<T>::type, D> raii_wrap(T obj, D deleter) {
|
||||||
return raii_wrapper<typename std::remove_reference<T>::type, D>(obj, deleter);
|
return raii_wrapper<typename std::remove_reference<T>::type, D>(obj, deleter);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user