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
This commit is contained in:
parent
2bd4bfee7e
commit
949bd6c8ce
@ -1,3 +1,8 @@
|
||||
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. */
|
||||
|
22
gcc/testsuite/g++.dg/template/ptrmem27.C
Normal file
22
gcc/testsuite/g++.dg/template/ptrmem27.C
Normal file
@ -0,0 +1,22 @@
|
||||
// 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user