Was kommt zuerst - Template-Instanziierung vs. Makro-Erweiterung?

Betrachten wir ein Codebeispiel wie dieses (es ist nur ein künstliches Beispiel zum Kombinieren)define undtemplate, suche keinen Sinn es):

#define COMMA ,

template <typename A> class Test
{
public:
    Test(){}

    void Foo(A var COMMA int test);
};

Test<int> Knarz;

Frage:

Ist meine Annahme richtig, dasszuerst Der Präprozessor sucht / ersetzt alle Vorkommen von COMMA undzweite Der Compiler wird alle Vorlagen in dieser Reihenfolge instanziieren.

Nachverfolgen:

Wenn die obige Antwort lautet 'Ja'Kannst du, wie ich hoffe, erklären, warum das so ist?Lösung mit Vorlagen und definiert funktioniert?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage