foo.SetValue is an expression of a very special category, a pending member function call expression. It can only be used with the function call operator, and in no other manner (ยง5.2.5[expr.ref]/4)
To construct a member function pointer, the only valid syntax is &C::SetValue, and the underlying reason is that each instance of C, such as foo, has its own foo.m_count, whose address can be taken, but the SetValue is the same between all instances of C, except where virtual. Note that &C::m_count is not the same thing as &foo.m_count
Thanks for the clarification. I guess I need to find where one can suggest a change to the standard. Unless there is a strong reason for this, it seems anti-intuitive and creates some nasty syntax when combined with auto-keyword.