PR c++/87480 - decltype of member access in default template arg
authorJason Merrill <jason@redhat.com>
Wed, 20 Mar 2019 20:31:40 +0000 (16:31 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 20 Mar 2019 20:31:40 +0000 (16:31 -0400)
commit292a8bbb27fd13e87552ca7c98a9d4e82c21b385
tree2150935ef639b1e97f5dcdda3907facd092ba69b
parent3ad7fed1cc87d281881757477c5197d9d3a97232
PR c++/87480 - decltype of member access in default template arg

The issue here is that declval<T>().d is considered instantiation-dependent
within a template, as the access to 'd' might depend on the particular
specialization.  But when we're deducing template arguments for a call, we
know that the call and the arguments are non-dependent, so we can do the
substitution as though we aren't in a template.  Which strictly speaking we
aren't, since the default argument is considered a separate definition.

* pt.c (type_unification_real): Accept a dependent result in
template context.

From-SVN: r269826
gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp0x/fntmpdefarg11.C [new file with mode: 0644]