On 08 Sep 2014, at 17:45, Sebastian Redl
I’m running out of time trying to trace the history of SFINAE, but I believe it was never intended to allow complicated overload resolution choices, but only to prevent accidental errors.
Only read the below if you are interested in C++ history. I completed my archeology trip into the WG-21 archives and traced the history of SFINAE as well as I could. The actual wording for SFINAE came into the standard at pretty much the last second. In the December 1996 draft standard (the one sent out for national body reviews, document number N1043), there is no such thing. http://www.open-std.org/jtc1/sc22/open/n2356/ The wording suddenly appears as issue 6.64 with a resolution already in place of the document "Template Issues and Proposed Resolutions, Revision 21", in the pre-Morristown mailing. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/1997/N1125.pdf And the updated draft in the same mailing, dating 29 September, already has that wording (note that open-std doesn't host this document publically): http://casteyde.christian.free.fr/cpp/cours/drafts/template.html In fact, the official document number of that draft is N1117. It appears that what we now know as SFINAE came into being between the London and Morristown meetings in non-public discussions. Someone with access to the reflector archives might be able to trace it more accurately. This strongly supports my theory that modern usage of SFINAE is as much an accident as template metaprogramming. Sebastian