// PR c++/64352 // { dg-do compile { target c++11 } } template struct bool_type { static constexpr bool value = B; }; using true_type = bool_type; using false_type = bool_type; template T&& declval(); template struct void_ { using type = void; }; template using void_t = typename void_::type; template struct _Has_addressof_free: false_type { }; template struct _Has_addressof_free <_Tp, void_t()) )>> : true_type { }; struct foo {}; void operator&(foo) = delete; int main() { static_assert( !_Has_addressof_free::value, "" ); // error: use of deleted function 'void operator&(foo)' static_assert( !_Has_addressof_free::value, "" ); }