This looks right, but in case the std::bind code is what's responsible for the msvc errors, you could try a workaround by replacing std::bind calls with lambdas:
void RegisterValidationInterface(CValidationInterface* pwalletIn) {
ValidationInterfaceConnections& conns = g_signals.m_internals->m_connMainSignals[pwalletIn];
conns.UpdatedBlockTip = g_signals.m_internals->UpdatedBlockTip.connect([pwalletIn](const CChainState& chainstate, const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload){ pwalletIn->UpdatedBlockTip(chainstate, pindexNew, pindexFork, fInitialDownload); });
conns.TransactionAddedToMempool = g_signals.m_internals->TransactionAddedToMempool.connect([pwalletIn](const CTransactionRef &ptxn){ pwalletIn->TransactionAddedToMempool(ptxn); });
conns.TransactionRemovedFromMempool = g_signals.m_internals->TransactionRemovedFromMempool.connect([pwalletIn](const CTransactionRef &ptx){ pwalletIn->TransactionRemovedFromMempool(ptx); });
conns.BlockConnected = g_signals.m_internals->BlockConnected.connect([pwalletIn](const CChainState& chainstate, const std::shared_ptr<const CBlock> &block, const CBlockIndex *pindex, const std::vector<CTransactionRef> &txnConflicted){ pwalletIn->BlockConnected(chainstate, block, pindex, txnConflicted); });
conns.BlockDisconnected = g_signals.m_internals->BlockDisconnected.connect([pwalletIn](const CChainState& chainstate, const std::shared_ptr<const CBlock> &block){ pwalletIn->BlockDisconnected(chainstate, block); });
conns.ChainStateFlushed = g_signals.m_internals->ChainStateFlushed.connect([pwalletIn](const CChainState& chainstate, const CBlockLocator &locator){ pwalletIn->ChainStateFlushed(chainstate, locator); });
conns.BlockChecked = g_signals.m_internals->BlockChecked.connect([pwalletIn](const CChainState& chainstate, const CBlock& block, const CValidationState& state){ pwalletIn->BlockChecked(chainstate, block, state); });
conns.NewPoWValidBlock = g_signals.m_internals->NewPoWValidBlock.connect([pwalletIn](const CChainState& chainstate, const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& block){ pwalletIn->NewPoWValidBlock(chainstate, pindex, block); });
}