1
// In diesem Fall ist das erste Stück Code wird fehlschlagen und // Idecltype verwirrend ist es eine Notwendigkeit
template<typename A, typename B> // 1
auto add(A const& a, B const& b) { return a + b; }
template<typename A, typename B> // 2
auto add(A const& a, B const& b) -> decltype(a + b) { return a + b; }
Die zweite ist auch SFINAE-freundlich –
@PiotrSkotnicki Würde es Ihnen etwas ausmachen, einige Erklärungen zu geben? Warum ist die erste nicht SFINAE-freundlich? – songyuanyao
@songyuanyao der Ausdruck in einem abschließenden Rückgabetyp dient als Ausdruck SFINAE; Wenn es schlecht geformt ist, wird die Überlastung aus der Menge der Kandidaten ausgeschlossen. dies gilt nicht für 'auto' Rückgabetypabzug (der Ausdruck in einer return-Anweisung wird während der Überladungsauflösung nicht überprüft) –