Commit 93aa462d by Mark Mitchell Committed by Mark Mitchell

pt.c (convert_nontype_argument): Don't create things that aren't PTRMEM_CSTs when...

	* pt.c (convert_nontype_argument): Don't create things that aren't
	PTRMEM_CSTs when applying a qualification conversion to a
	PTRMEM_CST.

From-SVN: r25929
parent 65990099
1999-03-23 Mark Mitchell <mark@codesourcery.com>
* pt.c (convert_nontype_argument): Don't create things that aren't
PTRMEM_CSTs when applying a qualification conversion to a
PTRMEM_CST.
1999-03-23 Mark Mitchell <mark@codesourcery.com>
* Makefile.in (OBJS): Don't mention hash.o.
(OBJDEPS): Likewise.
......
......@@ -2703,10 +2703,28 @@ convert_nontype_argument (type, expr)
tree type_pointed_to = TREE_TYPE (type);
if (TYPE_PTRMEM_P (type))
/* For a non-type template-parameter of type pointer to data
member, qualification conversions (_conv.qual_) are
applied. */
return perform_qualification_conversions (type, expr);
{
tree e;
/* For a non-type template-parameter of type pointer to data
member, qualification conversions (_conv.qual_) are
applied. */
e = perform_qualification_conversions (type, expr);
if (TREE_CODE (e) == NOP_EXPR)
{
/* The call to perform_qualification_conversions will
insert a NOP_EXPR over EXPR to do express
conversion, if necessary. But, that will confuse
us if we use this (converted) template parameter to
instantiate another template; then the thing will
not look like a valid template argument. So, just
make a new constant, of the appropriate type. */
e = make_node (PTRMEM_CST);
TREE_TYPE (e) = type;
PTRMEM_CST_MEMBER (e) = PTRMEM_CST_MEMBER (expr);
}
return e;
}
else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
{
/* For a non-type template-parameter of type pointer to
......
// Build don't link:
// Origin: Jason Merrill <jason@cygnus.com>
struct A
{
A() : x(123) { }
int x;
};
A a;
template<const int A::*PX>
struct B
{
static int g() { return a.*PX; }
};
int main(int argc, char *argv[])
{
int n = B<&A::x>::g();
}
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