Use static_cast instead of C-style casts for non-fundamental types

A C-style cast is equivalent to try casting in the following order:

1. const_cast(...)
2. static_cast(...)
3. const_cast(static_cast(...))
4. reinterpret_cast(...)
5. const_cast(reinterpret_cast(...))

By using static_cast<T>(...) explicitly we avoid the possibility
of an unintentional and dangerous reinterpret_cast. Furthermore
static_cast<T>(...) allows for easier grepping of casts.
This commit is contained in:
practicalswift 2017-06-01 16:13:35 +02:00
parent 98212745c8
commit 9ad6746ccd
24 changed files with 44 additions and 44 deletions

View File

@ -59,7 +59,7 @@ public:
template <typename Stream, typename Operation> template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action) { inline void SerializationOp(Stream& s, Operation ser_action) {
READWRITE(*(CAddress*)this); READWRITE(*static_cast<CAddress*>(this));
READWRITE(source); READWRITE(source);
READWRITE(nLastSuccess); READWRITE(nLastSuccess);
READWRITE(nAttempts); READWRITE(nAttempts);

View File

@ -33,14 +33,14 @@ CScript ParseScript(const std::string& s)
if (op < OP_NOP && op != OP_RESERVED) if (op < OP_NOP && op != OP_RESERVED)
continue; continue;
const char* name = GetOpName((opcodetype)op); const char* name = GetOpName(static_cast<opcodetype>(op));
if (strcmp(name, "OP_UNKNOWN") == 0) if (strcmp(name, "OP_UNKNOWN") == 0)
continue; continue;
std::string strName(name); std::string strName(name);
mapOpNames[strName] = (opcodetype)op; mapOpNames[strName] = static_cast<opcodetype>(op);
// Convenience: OP_ADD and just ADD are both recognized: // Convenience: OP_ADD and just ADD are both recognized:
boost::algorithm::replace_first(strName, "OP_", ""); boost::algorithm::replace_first(strName, "OP_", "");
mapOpNames[strName] = (opcodetype)op; mapOpNames[strName] = static_cast<opcodetype>(op);
} }
} }

View File

@ -512,7 +512,7 @@ struct event_base* EventBase()
static void httpevent_callback_fn(evutil_socket_t, short, void* data) static void httpevent_callback_fn(evutil_socket_t, short, void* data)
{ {
// Static handler: simply call inner handler // Static handler: simply call inner handler
HTTPEvent *self = ((HTTPEvent*)data); HTTPEvent *self = static_cast<HTTPEvent*>(data);
self->handler(); self->handler();
if (self->deleteWhenTriggered) if (self->deleteWhenTriggered)
delete self; delete self;

View File

@ -299,7 +299,7 @@ CNode* CConnman::FindNode(const CNetAddr& ip)
{ {
LOCK(cs_vNodes); LOCK(cs_vNodes);
for (CNode* pnode : vNodes) { for (CNode* pnode : vNodes) {
if ((CNetAddr)pnode->addr == ip) { if (static_cast<CNetAddr>(pnode->addr) == ip) {
return pnode; return pnode;
} }
} }
@ -310,7 +310,7 @@ CNode* CConnman::FindNode(const CSubNet& subNet)
{ {
LOCK(cs_vNodes); LOCK(cs_vNodes);
for (CNode* pnode : vNodes) { for (CNode* pnode : vNodes) {
if (subNet.Match((CNetAddr)pnode->addr)) { if (subNet.Match(static_cast<CNetAddr>(pnode->addr))) {
return pnode; return pnode;
} }
} }
@ -332,7 +332,7 @@ CNode* CConnman::FindNode(const CService& addr)
{ {
LOCK(cs_vNodes); LOCK(cs_vNodes);
for (CNode* pnode : vNodes) { for (CNode* pnode : vNodes) {
if ((CService)pnode->addr == addr) { if (static_cast<CService>(pnode->addr) == addr) {
return pnode; return pnode;
} }
} }
@ -372,7 +372,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
return nullptr; return nullptr;
// Look for an existing connection // Look for an existing connection
CNode* pnode = FindNode((CService)addrConnect); CNode* pnode = FindNode(static_cast<CService>(addrConnect));
if (pnode) if (pnode)
{ {
LogPrintf("Failed to open new connection, already connected\n"); LogPrintf("Failed to open new connection, already connected\n");
@ -403,7 +403,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
// Also store the name we used to connect in that CNode, so that future FindNode() calls to that // Also store the name we used to connect in that CNode, so that future FindNode() calls to that
// name catch this early. // name catch this early.
LOCK(cs_vNodes); LOCK(cs_vNodes);
CNode* pnode = FindNode((CService)addrConnect); CNode* pnode = FindNode(static_cast<CService>(addrConnect));
if (pnode) if (pnode)
{ {
pnode->MaybeSetAddrName(std::string(pszDest)); pnode->MaybeSetAddrName(std::string(pszDest));
@ -533,7 +533,7 @@ void CConnman::Ban(const CSubNet& subNet, const BanReason &banReason, int64_t ba
{ {
LOCK(cs_vNodes); LOCK(cs_vNodes);
for (CNode* pnode : vNodes) { for (CNode* pnode : vNodes) {
if (subNet.Match((CNetAddr)pnode->addr)) if (subNet.Match(static_cast<CNetAddr>(pnode->addr)))
pnode->fDisconnect = true; pnode->fDisconnect = true;
} }
} }
@ -1946,7 +1946,7 @@ bool CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai
} }
if (!pszDest) { if (!pszDest) {
if (IsLocal(addrConnect) || if (IsLocal(addrConnect) ||
FindNode((CNetAddr)addrConnect) || IsBanned(addrConnect) || FindNode(static_cast<CNetAddr>(addrConnect)) || IsBanned(addrConnect) ||
FindNode(addrConnect.ToStringIPPort())) FindNode(addrConnect.ToStringIPPort()))
return false; return false;
} else if (FindNode(std::string(pszDest))) } else if (FindNode(std::string(pszDest)))

View File

@ -2616,7 +2616,7 @@ static bool SendRejectsAndCheckIfBanned(CNode* pnode, CConnman* connman)
CNodeState &state = *State(pnode->GetId()); CNodeState &state = *State(pnode->GetId());
for (const CBlockReject& reject : state.rejects) { for (const CBlockReject& reject : state.rejects) {
connman->PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, (std::string)NetMsgType::BLOCK, reject.chRejectCode, reject.strRejectReason, reject.hashBlock)); connman->PushMessage(pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::REJECT, std::string(NetMsgType::BLOCK), reject.chRejectCode, reject.strRejectReason, reject.hashBlock));
} }
state.rejects.clear(); state.rejects.clear();

View File

@ -526,17 +526,17 @@ unsigned short CService::GetPort() const
bool operator==(const CService& a, const CService& b) bool operator==(const CService& a, const CService& b)
{ {
return (CNetAddr)a == (CNetAddr)b && a.port == b.port; return static_cast<CNetAddr>(a) == static_cast<CNetAddr>(b) && a.port == b.port;
} }
bool operator!=(const CService& a, const CService& b) bool operator!=(const CService& a, const CService& b)
{ {
return (CNetAddr)a != (CNetAddr)b || a.port != b.port; return static_cast<CNetAddr>(a) != static_cast<CNetAddr>(b) || a.port != b.port;
} }
bool operator<(const CService& a, const CService& b) bool operator<(const CService& a, const CService& b)
{ {
return (CNetAddr)a < (CNetAddr)b || ((CNetAddr)a == (CNetAddr)b && a.port < b.port); return static_cast<CNetAddr>(a) < static_cast<CNetAddr>(b) || (static_cast<CNetAddr>(a) == static_cast<CNetAddr>(b) && a.port < b.port);
} }
bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const

View File

@ -528,7 +528,7 @@ bool HaveNameProxy() {
bool IsProxy(const CNetAddr &addr) { bool IsProxy(const CNetAddr &addr) {
LOCK(cs_proxyInfos); LOCK(cs_proxyInfos);
for (int i = 0; i < NET_MAX; i++) { for (int i = 0; i < NET_MAX; i++) {
if (addr == (CNetAddr)proxyInfo[i].proxy) if (addr == static_cast<CNetAddr>(proxyInfo[i].proxy))
return true; return true;
} }
return false; return false;

View File

@ -86,14 +86,14 @@ public:
CBlock(const CBlockHeader &header) CBlock(const CBlockHeader &header)
{ {
SetNull(); SetNull();
*((CBlockHeader*)this) = header; *(static_cast<CBlockHeader*>(this)) = header;
} }
ADD_SERIALIZE_METHODS; ADD_SERIALIZE_METHODS;
template <typename Stream, typename Operation> template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action) { inline void SerializationOp(Stream& s, Operation ser_action) {
READWRITE(*(CBlockHeader*)this); READWRITE(*static_cast<CBlockHeader*>(this));
READWRITE(vtx); READWRITE(vtx);
} }

View File

@ -301,8 +301,8 @@ public:
READWRITE(nTime); READWRITE(nTime);
uint64_t nServicesInt = nServices; uint64_t nServicesInt = nServices;
READWRITE(nServicesInt); READWRITE(nServicesInt);
nServices = (ServiceFlags)nServicesInt; nServices = static_cast<ServiceFlags>(nServicesInt);
READWRITE(*(CService*)this); READWRITE(*static_cast<CService*>(this));
} }
// TODO: make private (improves encapsulation) // TODO: make private (improves encapsulation)

View File

@ -709,7 +709,7 @@ int main(int argc, char *argv[])
if (BitcoinCore::baseInitialize()) { if (BitcoinCore::baseInitialize()) {
app.requestInitialize(); app.requestInitialize();
#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 #if defined(Q_OS_WIN) && QT_VERSION >= 0x050000
WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("%1 didn't yet exit safely...").arg(QObject::tr(PACKAGE_NAME)), (HWND)app.getMainWinId()); WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("%1 didn't yet exit safely...").arg(QObject::tr(PACKAGE_NAME)), static_cast<HWND>(app.getMainWinId()));
#endif #endif
app.exec(); app.exec();
app.requestShutdown(); app.requestShutdown();

View File

@ -598,7 +598,7 @@ void BitcoinGUI::createTrayIconMenu()
#else #else
// Note: On Mac, the dock icon is used to provide the tray's functionality. // Note: On Mac, the dock icon is used to provide the tray's functionality.
MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance(); MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance();
dockIconHandler->setMainWindow((QMainWindow *)this); dockIconHandler->setMainWindow(static_cast<QMainWindow*>(this));
trayIconMenu = dockIconHandler->dockMenu(); trayIconMenu = dockIconHandler->dockMenu();
#endif #endif
@ -921,13 +921,13 @@ void BitcoinGUI::message(const QString &title, const QString &message, unsigned
buttons = QMessageBox::Ok; buttons = QMessageBox::Ok;
showNormalIfMinimized(); showNormalIfMinimized();
QMessageBox mBox((QMessageBox::Icon)nMBoxIcon, strTitle, message, buttons, this); QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle, message, buttons, this);
int r = mBox.exec(); int r = mBox.exec();
if (ret != nullptr) if (ret != nullptr)
*ret = r == QMessageBox::Ok; *ret = r == QMessageBox::Ok;
} }
else else
notificator->notify((Notificator::Class)nNotifyIcon, strTitle, message); notificator->notify(static_cast<Notificator::Class>(nNotifyIcon), strTitle, message);
} }
void BitcoinGUI::changeEvent(QEvent *e) void BitcoinGUI::changeEvent(QEvent *e)

View File

@ -145,7 +145,7 @@ CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidge
if (settings.contains("nCoinControlMode") && !settings.value("nCoinControlMode").toBool()) if (settings.contains("nCoinControlMode") && !settings.value("nCoinControlMode").toBool())
ui->radioTreeMode->click(); ui->radioTreeMode->click();
if (settings.contains("nCoinControlSortColumn") && settings.contains("nCoinControlSortOrder")) if (settings.contains("nCoinControlSortColumn") && settings.contains("nCoinControlSortOrder"))
sortView(settings.value("nCoinControlSortColumn").toInt(), ((Qt::SortOrder)settings.value("nCoinControlSortOrder").toInt())); sortView(settings.value("nCoinControlSortColumn").toInt(), (static_cast<Qt::SortOrder>(settings.value("nCoinControlSortOrder").toInt())));
} }
CoinControlDialog::~CoinControlDialog() CoinControlDialog::~CoinControlDialog()
@ -431,7 +431,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
if (amount > 0) if (amount > 0)
{ {
CTxOut txout(amount, (CScript)std::vector<unsigned char>(24, 0)); CTxOut txout(amount, static_cast<CScript>(std::vector<unsigned char>(24, 0)));
txDummy.vout.push_back(txout); txDummy.vout.push_back(txout);
fDust |= IsDust(txout, ::dustRelayFee); fDust |= IsDust(txout, ::dustRelayFee);
} }
@ -522,7 +522,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
// Never create dust outputs; if we would, just add the dust to the fee. // Never create dust outputs; if we would, just add the dust to the fee.
if (nChange > 0 && nChange < MIN_CHANGE) if (nChange > 0 && nChange < MIN_CHANGE)
{ {
CTxOut txout(nChange, (CScript)std::vector<unsigned char>(24, 0)); CTxOut txout(nChange, static_cast<CScript>(std::vector<unsigned char>(24, 0)));
if (IsDust(txout, ::dustRelayFee)) if (IsDust(txout, ::dustRelayFee))
{ {
nPayFee += nChange; nPayFee += nChange;

View File

@ -24,7 +24,7 @@ void CoinControlTreeWidget::keyPressEvent(QKeyEvent *event)
else if (event->key() == Qt::Key_Escape) // press esc -> close dialog else if (event->key() == Qt::Key_Escape) // press esc -> close dialog
{ {
event->ignore(); event->ignore();
CoinControlDialog *coinControlDialog = (CoinControlDialog*)this->parentWidget(); CoinControlDialog *coinControlDialog = static_cast<CoinControlDialog*>(this->parentWidget());
coinControlDialog->done(QDialog::Accepted); coinControlDialog->done(QDialog::Accepted);
} }
else else

View File

@ -352,7 +352,7 @@ void SendCoinsDialog::on_sendButton_clicked()
SendConfirmationDialog confirmationDialog(tr("Confirm send coins"), SendConfirmationDialog confirmationDialog(tr("Confirm send coins"),
questionString.arg(formatted.join("<br />")), SEND_CONFIRM_DELAY, this); questionString.arg(formatted.join("<br />")), SEND_CONFIRM_DELAY, this);
confirmationDialog.exec(); confirmationDialog.exec();
QMessageBox::StandardButton retval = (QMessageBox::StandardButton)confirmationDialog.result(); QMessageBox::StandardButton retval = static_cast<QMessageBox::StandardButton>(confirmationDialog.result());
if(retval != QMessageBox::Yes) if(retval != QMessageBox::Yes)
{ {

View File

@ -38,7 +38,7 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
float fontFactor = 1.0; float fontFactor = 1.0;
float devicePixelRatio = 1.0; float devicePixelRatio = 1.0;
#if QT_VERSION > 0x050100 #if QT_VERSION > 0x050100
devicePixelRatio = ((QGuiApplication*)QCoreApplication::instance())->devicePixelRatio(); devicePixelRatio = static_cast<QGuiApplication*>(QCoreApplication::instance())->devicePixelRatio();
#endif #endif
// define text to place // define text to place

View File

@ -309,7 +309,7 @@ void TransactionView::chooseWatchonly(int idx)
if(!transactionProxyModel) if(!transactionProxyModel)
return; return;
transactionProxyModel->setWatchOnlyFilter( transactionProxyModel->setWatchOnlyFilter(
(TransactionFilterProxy::WatchOnlyFilter)watchOnlyWidget->itemData(idx).toInt()); static_cast<TransactionFilterProxy::WatchOnlyFilter>(watchOnlyWidget->itemData(idx).toInt()));
} }
void TransactionView::changedPrefix(const QString &prefix) void TransactionView::changedPrefix(const QString &prefix)

View File

@ -701,7 +701,7 @@ bool WalletModel::bumpFee(uint256 hash)
questionString.append("</td></tr></table>"); questionString.append("</td></tr></table>");
SendConfirmationDialog confirmationDialog(tr("Confirm fee bump"), questionString); SendConfirmationDialog confirmationDialog(tr("Confirm fee bump"), questionString);
confirmationDialog.exec(); confirmationDialog.exec();
QMessageBox::StandardButton retval = (QMessageBox::StandardButton)confirmationDialog.result(); QMessageBox::StandardButton retval = static_cast<QMessageBox::StandardButton>(confirmationDialog.result());
// cancel sign&broadcast if users doesn't want to bump the fee // cancel sign&broadcast if users doesn't want to bump the fee
if (retval != QMessageBox::Yes) { if (retval != QMessageBox::Yes) {

View File

@ -56,7 +56,7 @@ bool WinShutdownMonitor::nativeEventFilter(const QByteArray &eventType, void *pM
void WinShutdownMonitor::registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId) void WinShutdownMonitor::registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId)
{ {
typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR); typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR);
PSHUTDOWNBRCREATE shutdownBRCreate = (PSHUTDOWNBRCREATE)GetProcAddress(GetModuleHandleA("User32.dll"), "ShutdownBlockReasonCreate"); PSHUTDOWNBRCREATE shutdownBRCreate = static_cast<PSHUTDOWNBRCREATE>(GetProcAddress(GetModuleHandleA("User32.dll"), "ShutdownBlockReasonCreate"));
if (shutdownBRCreate == nullptr) { if (shutdownBRCreate == nullptr) {
qWarning() << "registerShutdownBlockReason: GetProcAddress for ShutdownBlockReasonCreate failed"; qWarning() << "registerShutdownBlockReason: GetProcAddress for ShutdownBlockReasonCreate failed";
return; return;

View File

@ -567,7 +567,7 @@ public:
pc += nSize; pc += nSize;
} }
opcodeRet = (opcodetype)opcode; opcodeRet = static_cast<opcodetype>(opcode);
return true; return true;
} }

View File

@ -211,7 +211,7 @@ BOOST_AUTO_TEST_CASE(versionbits_test)
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN); const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
const Consensus::Params &mainnetParams = chainParams->GetConsensus(); const Consensus::Params &mainnetParams = chainParams->GetConsensus();
for (int i=0; i<(int) Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) { for (int i=0; i<(int) Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) {
uint32_t bitmask = VersionBitsMask(mainnetParams, (Consensus::DeploymentPos)i); uint32_t bitmask = VersionBitsMask(mainnetParams, static_cast<Consensus::DeploymentPos>(i));
// Make sure that no deployment tries to set an invalid bit. // Make sure that no deployment tries to set an invalid bit.
BOOST_CHECK_EQUAL(bitmask & ~(uint32_t)VERSIONBITS_TOP_MASK, bitmask); BOOST_CHECK_EQUAL(bitmask & ~(uint32_t)VERSIONBITS_TOP_MASK, bitmask);
@ -223,7 +223,7 @@ BOOST_AUTO_TEST_CASE(versionbits_test)
// activated soft fork could be later changed to be earlier to avoid // activated soft fork could be later changed to be earlier to avoid
// overlap.) // overlap.)
for (int j=i+1; j<(int) Consensus::MAX_VERSION_BITS_DEPLOYMENTS; j++) { for (int j=i+1; j<(int) Consensus::MAX_VERSION_BITS_DEPLOYMENTS; j++) {
if (VersionBitsMask(mainnetParams, (Consensus::DeploymentPos)j) == bitmask) { if (VersionBitsMask(mainnetParams, static_cast<Consensus::DeploymentPos>(j)) == bitmask) {
BOOST_CHECK(mainnetParams.vDeployments[j].nStartTime > mainnetParams.vDeployments[i].nTimeout || BOOST_CHECK(mainnetParams.vDeployments[j].nStartTime > mainnetParams.vDeployments[i].nTimeout ||
mainnetParams.vDeployments[i].nStartTime > mainnetParams.vDeployments[j].nTimeout); mainnetParams.vDeployments[i].nStartTime > mainnetParams.vDeployments[j].nTimeout);
} }

View File

@ -133,7 +133,7 @@ TorControlConnection::~TorControlConnection()
void TorControlConnection::readcb(struct bufferevent *bev, void *ctx) void TorControlConnection::readcb(struct bufferevent *bev, void *ctx)
{ {
TorControlConnection *self = (TorControlConnection*)ctx; TorControlConnection *self = static_cast<TorControlConnection*>(ctx);
struct evbuffer *input = bufferevent_get_input(bev); struct evbuffer *input = bufferevent_get_input(bev);
size_t n_read_out = 0; size_t n_read_out = 0;
char *line; char *line;
@ -178,7 +178,7 @@ void TorControlConnection::readcb(struct bufferevent *bev, void *ctx)
void TorControlConnection::eventcb(struct bufferevent *bev, short what, void *ctx) void TorControlConnection::eventcb(struct bufferevent *bev, short what, void *ctx)
{ {
TorControlConnection *self = (TorControlConnection*)ctx; TorControlConnection *self = static_cast<TorControlConnection*>(ctx);
if (what & BEV_EVENT_CONNECTED) { if (what & BEV_EVENT_CONNECTED) {
LogPrint(BCLog::TOR, "tor: Successfully connected!\n"); LogPrint(BCLog::TOR, "tor: Successfully connected!\n");
self->connected(*self); self->connected(*self);
@ -725,7 +725,7 @@ fs::path TorController::GetPrivateKeyFile()
void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg) void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg)
{ {
TorController *self = (TorController*)arg; TorController *self = static_cast<TorController*>(arg);
self->Reconnect(); self->Reconnect();
} }

View File

@ -46,7 +46,7 @@ struct CDiskTxPos : public CDiskBlockPos
template <typename Stream, typename Operation> template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action) { inline void SerializationOp(Stream& s, Operation ser_action) {
READWRITE(*(CDiskBlockPos*)this); READWRITE(*static_cast<CDiskBlockPos*>(this));
READWRITE(VARINT(nTxOffset)); READWRITE(VARINT(nTxOffset));
} }

View File

@ -1549,9 +1549,9 @@ int32_t ComputeBlockVersion(const CBlockIndex* pindexPrev, const Consensus::Para
int32_t nVersion = VERSIONBITS_TOP_BITS; int32_t nVersion = VERSIONBITS_TOP_BITS;
for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) { for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) {
ThresholdState state = VersionBitsState(pindexPrev, params, (Consensus::DeploymentPos)i, versionbitscache); ThresholdState state = VersionBitsState(pindexPrev, params, static_cast<Consensus::DeploymentPos>(i), versionbitscache);
if (state == THRESHOLD_LOCKED_IN || state == THRESHOLD_STARTED) { if (state == THRESHOLD_LOCKED_IN || state == THRESHOLD_STARTED) {
nVersion |= VersionBitsMask(params, (Consensus::DeploymentPos)i); nVersion |= VersionBitsMask(params, static_cast<Consensus::DeploymentPos>(i));
} }
} }

View File

@ -399,7 +399,7 @@ public:
mapValue["timesmart"] = strprintf("%u", nTimeSmart); mapValue["timesmart"] = strprintf("%u", nTimeSmart);
} }
READWRITE(*(CMerkleTx*)this); READWRITE(*static_cast<CMerkleTx*>(this));
std::vector<CMerkleTx> vUnused; //!< Used to be vtxPrev std::vector<CMerkleTx> vUnused; //!< Used to be vtxPrev
READWRITE(vUnused); READWRITE(vUnused);
READWRITE(mapValue); READWRITE(mapValue);