Qu'est-ce que “l'Expression SFINAE”?

À http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx, le VC++ équipe de déclarer officiellement qu'ils n'ont pas encore mis en œuvre le C++11 de base de la fonction "Expression SFINAE". Cependant, Les exemples de code suivants copié à partir de http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html sont acceptées par le compilateur VC++.

exemple 1:

template <int I> struct A {};

char xxx(int);
char xxx(float);

template <class T> A<sizeof(xxx((T)0))> f(T){}

int main()
{
    f(1);
}

exemple 2:

struct X {};
struct Y 
{
    Y(X){}
};

template <class T> auto f(T t1, T t2) -> decltype(t1 + t2); //#1
X f(Y, Y);  //#2

X x1, x2;
X x3 = f(x1, x2);  //deduction fails on #1 (cannot add X+X), calls #2

Ma question est: qu'est-Ce que "l'Expression SFINAE"?

  • Pourquoi ne pas regarder dans la évident: en.wikipedia.org/wiki/Substitution_failure_is_not_an_error
  • Qui explique normal SFINAE, pas l'Expression SFINAE. C'est un bon point, cependant. Ne OP savoir sur SFINAE en général?
  • Oui, je sais SFINAE en général. Un grand merci à vous pour votre illustration explication.
InformationsquelleAutor xmllmx | 2012-09-29