------- Comment #6 from rguenth at gcc dot gnu dot org 2008-08-04 13:41 ------- Of course it didn't work. The following seems to
Index: gcc/cp/class.c =================================================================== --- gcc/cp/class.c (revision 138611) +++ gcc/cp/class.c (working copy) @@ -6197,7 +6197,12 @@ resolve_address_of_overloaded_function ( } if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type)) - return cp_build_unary_op (ADDR_EXPR, fn, 0, flags); + { + tree tem = cp_build_unary_op (ADDR_EXPR, fn, 0, flags); + if (TREE_CODE (tem) == PTRMEM_CST) + return make_ptrmem_cst (target_type, fn); + return tem; + } else { /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op we might be able to unconditionally do return make_ptrmem_cst (target_type, fn); for TYPE_PTRMEMFUNC_P (target_type) though. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37016