Diese Frage hat hier schon eine Antwort:
Was ist der Zweck von class = void
in den folgenden Code-Snippets?
Das ist Ihre Standard-Strukturvorlage, sie fragt nach zwei Vorlagenargumenten, aber die zweite ist standardmäßig auf void
gesetzt, daher muss dieses Argument nicht explizit angegeben werden, etwa wie ein Standardfunktionsparameter.
Dann:
%Vor% Ist eine Template-Spezialisierung für Ihre has_type_member
-Struct, wird SFINAE diese Spezialisierung ausschließen, wenn T::type
nicht existiert (und somit eine ungültige Syntax ist), falls sie existiert, wird sie diese Spezialisierung anders wählen.
Der zweite Parameter muss für die Template-Spezialisierung verwendet werden, aber wir verwenden ihn nicht in unserem "Fallback" struct
, also setzen wir einfach auf void
.