Meditation, The Art of Exploitation

Thinking? At last I have discovered it--thought; this alone is inseparable from me. I am, I exist--that is certain. But for how long? For as long as I am thinking. For it could be, that were I totally to cease from thinking, I should totally cease to exist....I am, then, in the strict sense only a thing that thinks.

Wednesday, April 26, 2006

SFINAE

Substitution Failure Is Not An Error

From Wikipedia, the free encyclopedia (editted formatting)

Substitution Failure Is Not An Error (often referred to by the acronym SFINAE) is a compilation principle in object oriented programming, applied to C++ template programming in particular.

In attempting to use function template argument deduction to select among a number of candidate function templates, a C++ compiler may attempt an instantiation that fails on one or more of them.

For example, consider the following C++ program:

  template  void f( T );
template void f( T * );
//…
f( 1024 ); // instantiates first f

Even though substitution of the integer for T * in the second f function template would have been incorrect, the attempted substitution does not give rise to an error provided that a correct substitution is found. In this case, the first f is instantiated, and there is no error. Thus, we have the “substitution failure is not an error” concept, dubbed SFINAE by David Vandevoorde and Nicolai Josuttis. SFINAE is an important property in that, without it, it would be difficult to overload function templates; the combination of argument deduction and overloading would render many uses of a set of overloaded function templates illegal. But SFINAE is also valuable as a metaprogramming technique.