<!-- This issue tracker is only for technical issues related to Bitcoin Core.

General bitcoin questions and/or support requests are best directed to the Bitcoin StackExchange at https://bitcoin.stackexchange.com.

For reporting security issues, please read instructions at https://bitcoincore.org/en/contact/.

If the node is "stuck" during sync or giving "block checksum mismatch" errors, please ensure your hardware is stable by running memtest and observe CPU temperature with a load-test tool such as linpack before creating an issue! -->

<!-- Describe the issue -->
**Describe**
Hi all,
Bitcoin fails to build on MSVC due to waring c4858. Could you help look?
**Expected behavior**
Build successfully.
<!--- What behavior did you expect? -->

**Actual behavior**
F:\gitP\bitcoin\bitcoin\src\sync.h(168): error C2220: the following warning is treated as an error
F:\gitP\bitcoin\bitcoin\src\sync.h(166): note: while compiling class template member function 'bool UniqueLock<_Ty,std::unique_lock<PARENT>>::TryEnter(const char *,const char *,int)'
        with
        [
            _Ty=RecursiveMutex,
            PARENT=std::recursive_mutex
        ]
F:\gitP\bitcoin\bitcoin\src\sync.h(179): note: see reference to function template instantiation 'bool UniqueLock<_Ty,std::unique_lock<PARENT>>::TryEnter(const char *,const char *,int)' being compiled
        with
        [
            _Ty=RecursiveMutex,
            PARENT=std::recursive_mutex
        ]
F:\gitP\bitcoin\bitcoin\src\net.h(822): note: see reference to class template instantiation 'UniqueLock<_Ty,std::unique_lock<PARENT>>' being compiled
        with
        [
            _Ty=RecursiveMutex,
            PARENT=std::recursive_mutex
        ]
F:\gitP\bitcoin\bitcoin\src\sync.h(168): warning C4858: discarding return value: This function returns whether the operation succeeded in modifying object state. It is dangerous to ignore the return value.
**Detail log**
[Uploading build (3).log…]()
<!--- What was the actual behavior (provide screenshots if the issue is GUI-related)? -->

**To reproduce**
1. git clone https://github.com/bitcoin/bitcoin F:\gitP\bitcoin\bitcoin
2. cd F:\gitP\bitcoin\bitcoin\build_msvc
3. py -3 msvc-autogen.py
4. cd F:\gitP\bitcoin\tools\vcpkg
5. git -C "F:\gitP\bitcoin\tools\vcpkg" clean -xdf 2>&1
6. bootstrap-vcpkg.bat 2>&1
7.  set path=%cd%;%path%
8. cd F:\gitP\bitcoin\bitcoin\build_msvc
9.  msbuild /m /p:Platform=x64 /p:Configuration=Release bitcoin.sln /t:Rebuild 2>&1
<!--- How reliably can you reproduce the issue, what are the steps to do so? -->

**System information**
VS version: VS2019 (16.11.11)
Operating system: windows server 2019
the commit of Bitcoin we use is 5174a13

**workaround**
I modified the common.init.vcxproj.in file of this text like below to solve this issue:
\<DisableSpecificWarnings\>4018;4244;4267;4334;4715;4805;4834\</DisableSpecificWarnings\>
to be:
\<DisableSpecificWarnings\>4018;4244;4267;4334;4715;4805;4834;4858\</DisableSpecificWarnings\>
<!-- What version of Bitcoin Core are you using, where did you get it (website, self-compiled, etc)? -->

<!-- What type of machine are you observing the error on (OS/CPU and disk type)? -->

<!-- GUI-related issue? What is your operating system and its version? If Linux, what is your desktop environment and graphical shell? -->

<!-- Any extra information that might be useful in the debugging process. -->
<!--- This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred. -->

lblock)(MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__)
#define LOCK2(cs1, cs2)                                               \
    DebugLock<decltype(cs1)> criticalblock1(MaybeCheckNotHeld(cs1), #cs1, __FILE__, __LINE__); \
    DebugLock<decltype(cs2)> criticalblock2(MaybeCheckNotHeld(cs2), #cs2, __FILE__, __LINE__)
#define TRY_LOCK(cs, name) DebugLock<decltype(cs)> name(MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__, true)
#define WAIT_LOCK(cs, name) DebugLock<decltype(cs)> name(MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__)
#define ENTER_CRITICAL_SECTION(cs)                            \
    {                                                         \
        EnterCritical(#cs, __FILE__, __LINE__, &cs); \
        (cs).lock();                                          \
    }
#define LEAVE_CRITICAL_SECTION(cs)                                          \
    {                                                                       \
        std::string lockname;                                               \
        CheckLastCritical((void*)(&cs), lockname, #cs, __FILE__, __LINE__); \
        (cs).unlock();                                                      \
        LeaveCritical();                                                    \
    }
#define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }())
class CSemaphore
{
private:
    std::condition_variable condition;
    std::mutex mutex;
    int value;
public:
    explicit CSemaphore(int init) : value(init) {}
    void wait()
    {
        std::unique_lock<std::mutex> lock(mutex);
        condition.wait(lock, [&]() { return value >= 1; });
        value--;
    }
    bool try_wait()
    {
        std::lock_guard<std::mutex> lock(mutex);
        if (value < 1)
            return false;
        value--;
        return true;
    }
    void post()
    {
        {
            std::lock_guard<std::mutex> lock(mutex);
            value++;
        }
        condition.notify_one();
    }
