@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.