mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
1b82e09e18
commit
3696ea5851
|
|
@ -1,5 +1,8 @@
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
// 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, "" );
|
||||
}
|
||||
Loading…
Reference in New Issue