The use of three macros with variadic arguments was added to src/test/mempool_test.cpp in https://github.com/bitcoin/bitcoin/commit/f77e1d34fd5f17304ce319b5f962b8005592501a. 

The three macros below generate a compiler error with MSVC.

`#define MK_OUTPUTS(amounts...) std::vector<CAmount>{amounts}`
`#define MK_INPUTS(txs...) std::vector<CTransactionRef>{txs}`
`#define MK_INPUT_IDX(idxes...) std::vector<uint32_t>{idxes}`

The easy fix is to add a ',' after the named argument as per:

`#define MK_OUTPUTS(amounts,...) std::vector<CAmount>{amounts}`
`#define MK_INPUTS(txs,...) std::vector<CTransactionRef>{txs}`
`#define MK_INPUT_IDX(idxes,...) std::vector<uint32_t>{idxes}`

I don't know if that will break any other compilers.

If I had a spare 198 Swiss Francs I'd buy the C standard and check which is the correct approach, https://www.iso.org/standard/57853.html, but I don't.



BOOST_CHECK_EQUAL(testPool.size(), poolSize);
    
    poolSize = testPool.size();
    testPool.removeRecursive(txParent);
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 5);
    BOOST_CHECK_EQUAL(testPool.size(), 0U);
    
    for (int i = 0; i < 3; i++)
    {
        testPool.addUnchecked(txChild[i].GetHash(), entry.FromTx(txChild[i]));
        testPool.addUnchecked(txGrandChild[i].GetHash(), entry.FromTx(txGrandChild[i]));
    }
    
    
    poolSize = testPool.size();
    testPool.removeRecursive(txParent);
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 6);
    BOOST_CHECK_EQUAL(testPool.size(), 0U);
}
template<typename name>
static void CheckSort(CTxMemPool &pool, std::vector<std::string> &sortedOrder) EXCLUSIVE_LOCKS_REQUIRED(pool.cs)
{
    BOOST_CHECK_EQUAL(pool.size(), sortedOrder.size());
    typename CTxMemPool::indexed_transaction_set::index<name>::type::iterator it = pool.mapTx.get<name>().begin();
    int count=0;
    for (; it != pool.mapTx.get<name>().end(); ++it, ++count) {
        BOOST_CHECK_EQUAL(it->GetTx().GetHash().ToString(), sortedOrder[count]);
    }
}
BOOST_AUTO_TEST_CASE(MempoolIndexingTest)