http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49921
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-08-01 09:51:56 UTC --- Yes, the standard says: "If the result of .* or ->* is a function, then that result can be used only as the operand for the function call operator ()" So I think G++ should reject decltype((l->*ptr))