re PR c++/70505 (Constexpr failure when template type specified)

PR c++/70505

	* pt.c (tsubst_baselink): Give the new TEMPLATE_ID_EXPR
	unknown_type_node, too.

From-SVN: r235042
This commit is contained in:
Jason Merrill 2016-04-15 12:32:22 -04:00 committed by Jason Merrill
parent 26ad7ec736
commit a7b12f1f3e
3 changed files with 27 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2016-04-15 Jason Merrill <jason@redhat.com>
PR c++/70505
* pt.c (tsubst_baselink): Give the new TEMPLATE_ID_EXPR
unknown_type_node, too.
2016-04-15 Jason Merrill <jason@redhat.com>
Nathan Sidwell <nathan@acm.org>

View File

@ -13666,9 +13666,10 @@ tsubst_baselink (tree baselink, tree object_type,
/* Add back the template arguments, if present. */
if (BASELINK_P (baselink) && template_id_p)
BASELINK_FUNCTIONS (baselink)
= build_nt (TEMPLATE_ID_EXPR,
BASELINK_FUNCTIONS (baselink),
template_args);
= build2 (TEMPLATE_ID_EXPR,
unknown_type_node,
BASELINK_FUNCTIONS (baselink),
template_args);
/* Update the conversion operator type. */
BASELINK_OPTYPE (baselink) = optype;

View File

@ -0,0 +1,17 @@
// PR c++/70505
// { dg-do compile { target c++11 } }
template <class X>
struct s
{
template <class T>
static constexpr T f1(const T x) {return x;}
template <class T, T = f1<T>(sizeof(T))>
static constexpr T f2(const T x) {return x;}
static void f() {s<int>::f2(42);}
};
int main()
{
s<int>::f();
}