@Sven Groot: Thanks for joining the discussion.
I remember doing something similar. The problem was the same as in your suggestion.
It doesn't work for plain functions, in your case it because of "std::addressof".
I remember trying to use some template magic, traits, is_function<..>, conditional, enable_if, to make the compiler choose between two version but i failed miserably.
The compiler just didn't want to play ball. Either it's due to bugs in the compiler or me missing some small detail.
I just could figure out why it didn't work. Not even g++'s more helpful error messages helped me.
About 'Mr Crash' auto in class pseudo code: Would have been sweet if auto worked in classes like that. It would have reduced the pain of some template programming though it would surely cause other problems.