Commit 949bd6c8 by Jason Merrill Committed by Jason Merrill

re PR c++/61500 ([C++11] Can't take pointer to member referenced via member…

re PR c++/61500 ([C++11] Can't take pointer to member referenced via member pointer template parameter.)

	PR c++/61500
	* tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.

From-SVN: r211703
parent 2bd4bfee
2014-06-13 Jason Merrill <jason@redhat.com>
PR c++/61500
* tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
2014-06-15 Jan Hubicka <hubicka@ucw.cz>
* decl.c (grokvardecl): Fix pasto in previous patch.
......
......@@ -102,6 +102,16 @@ lvalue_kind (const_tree ref)
case IMAGPART_EXPR:
return lvalue_kind (TREE_OPERAND (ref, 0));
case MEMBER_REF:
case DOTSTAR_EXPR:
if (TREE_CODE (ref) == MEMBER_REF)
op1_lvalue_kind = clk_ordinary;
else
op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
op1_lvalue_kind = clk_none;
return op1_lvalue_kind;
case COMPONENT_REF:
op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
/* Look at the member designator. */
......
// PR c++/61500
struct X {
int i;
int j;
int foo(int X::* ptr);
template <int X::* ptr>
int bar();
};
int X::foo(int X::* ptr) {
int* p = &(this->*ptr); // OK.
return *p;
}
template <int X::* ptr>
int X::bar() {
int* p = &(this->*ptr); // gcc 4.9.0: OK in C++98 mode, fails in C++11 mode.
return *p;
}
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