mirror of
https://github.com/boostorg/core.git
synced 2025-07-30 04:47:24 +02:00
Slightly more succint sfinae expressions
This commit is contained in:
@ -172,19 +172,14 @@ namespace detail {
|
||||
template<class T>
|
||||
T addressof_declval() BOOST_NOEXCEPT;
|
||||
|
||||
template<class>
|
||||
struct addressof_void {
|
||||
typedef void type;
|
||||
};
|
||||
|
||||
template<class T, class E = void>
|
||||
struct addressof_member_operator {
|
||||
static constexpr bool value = false;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct addressof_member_operator<T, typename
|
||||
addressof_void<decltype(addressof_declval<T&>().operator&())>::type> {
|
||||
struct addressof_member_operator<T,
|
||||
decltype(addressof_declval<T&>().operator&(), void())> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
@ -201,8 +196,8 @@ struct addressof_non_member_operator {
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct addressof_non_member_operator<T, typename
|
||||
addressof_void<decltype(operator&(addressof_declval<T&>()))>::type> {
|
||||
struct addressof_non_member_operator<T,
|
||||
decltype(operator&(addressof_declval<T&>()), void())> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
@ -213,7 +208,7 @@ struct addressof_expression {
|
||||
|
||||
template<class T>
|
||||
struct addressof_expression<T,
|
||||
typename addressof_void<decltype(&addressof_declval<T&>())>::type> {
|
||||
decltype(&addressof_declval<T&>(), void())> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user