danke für suchen habe ich dieses Beispiel aus meinem Buch, aber ich kann verstehen, warum die LinieHilfe mit expliziter Vorlage especialization
S<void,int> sv; // uses Template at (2)
aber
S<void,char> e2;
//uses (1) when im thinking it would use (2) especialization as well
könnte jemand das Verhalten erklären? BTW alle Kommentare in Code unten sind von Buchautor
vielen Dank!
template<typename T>
class Types {
public:
typedef int I;
};
template<typename T, typename U = typename Types<T>::I>
class S; // (1)
template<>
class S<void> { // (2)
public:
void f();
};
template<> class S<char, char> {}; // (3)
template<> class S<char, 0>; // ERROR: 0 cannot substitute U
int main()
{
S<int>* pi; // OK: uses (1), no definition needed
S<int> e1; // ERROR: uses (1), but no definition available
S<void>* pv; // OK: uses (2)
S<void,int> sv; // OK: uses (2), definition available
S<void,char> e2; // OK: uses (1), definition available
S<char,char> e3; // ERROR: uses (3), but no definition available
}
aber es ist nicht die Spezialisierung für S entweder i siehe especialization Nur für S und {} und S sv; verwendet S –
pyralis
o i jetzt gerade gesehen, dass implizit eine S Ursache für das in Allgemeiner Vorlage Standardargument ist sorry ich im einen noobie verpaßt vielen Dank! Ich sehe es jetzt klar –
pyralis