Commit 3696ea58 by Jason Merrill Committed by Jason Merrill

re PR c++/64352 (No SFINAE with deleted function)

	PR c++/64352
	* pt.c (tsubst_copy_and_build): Pass complain to mark_used.

From-SVN: r218877
parent 1b82e09e
2014-12-18 Jason Merrill <jason@redhat.com>
PR c++/64352
* pt.c (tsubst_copy_and_build): Pass complain to mark_used.
PR c++/64251
* decl2.c (mark_used): Don't mark if in_template_function.
......
......@@ -15115,7 +15115,7 @@ tsubst_copy_and_build (tree t,
/* Remember that there was a reference to this entity. */
if (DECL_P (function))
mark_used (function);
mark_used (function, complain);
/* Put back tf_decltype for the actual call. */
complain |= decltype_flag;
......
// PR c++/64352
// { dg-do compile { target c++11 } }
template<bool B> struct bool_type
{ static constexpr bool value = B; };
using true_type = bool_type<true>;
using false_type = bool_type<false>;
template<typename T> T&& declval();
template<typename...> struct void_ { using type = void; };
template<typename... I> using void_t = typename void_<I...>::type;
template<typename _Tp, typename = void>
struct _Has_addressof_free: false_type { };
template<typename _Tp>
struct _Has_addressof_free
<_Tp, void_t<decltype( operator&(declval<const _Tp&>()) )>>
: true_type { };
struct foo {};
void operator&(foo) = delete;
int main()
{
static_assert( !_Has_addressof_free<int>::value, "" );
// error: use of deleted function 'void operator&(foo)'
static_assert( !_Has_addressof_free<foo>::value, "" );
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment