O que vem primeiro - instanciação de modelo vs. expansão de macro?

Vamos considerar um exemplo de código como este (é apenas um exemplo artificial para combinardefine etemplate, não procure por nenhum sentido):

#define COMMA ,

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

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

Test<int> Knarz;

Questão:

É minha suposição correta que,primeiro o pré-processador pesquisará / substituirá todas as ocorrências de COMMA esegundo o compilador irá instanciar qualquer modelo nessa ordem?

Acompanhamento:

Se a resposta acima for 'sim', como eu espero que seja, você pode explicar por que issosolução usando modelos e define trabalho?

questionAnswers(4)

yourAnswerToTheQuestion