It would be nice if there was a way to tell compilers not to drop the lock stack and thus issue warnings when accessing a symbol that needs a lock inside `Assume`/`Assert`.

Hit by (at least): @ajtowns , @jnewbery , me.
BOOST_CHECK(!ParseUInt8(" 1", &n)); 
    BOOST_CHECK(!ParseUInt8(" -1", &n));
    BOOST_CHECK(!ParseUInt8("++1", &n));
    BOOST_CHECK(!ParseUInt8("+-1", &n));
    BOOST_CHECK(!ParseUInt8("-+1", &n));
    BOOST_CHECK(!ParseUInt8("--1", &n));
    BOOST_CHECK(!ParseUInt8("-1", &n));
    BOOST_CHECK(!ParseUInt8("1 ", &n));
    BOOST_CHECK(!ParseUInt8("1a", &n));
    BOOST_CHECK(!ParseUInt8("aap", &n));
    BOOST_CHECK(!ParseUInt8("0x1", &n)); 
    BOOST_CHECK(!ParseUInt8(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
    
    BOOST_CHECK(!ParseUInt8("-255", &n));
    BOOST_CHECK(!ParseUInt8("256", &n));
    BOOST_CHECK(!ParseUInt8("-123", &n));
    BOOST_CHECK(!ParseUInt8("-123", nullptr));
    BOOST_CHECK(!ParseUInt8("256", nullptr));
}
BOOST_AUTO_TEST_CASE(test_ParseUInt16)
{
    uint16_t n;
    
    BOOST_CHECK(ParseUInt16("1234", nullptr));
    BOOST_CHECK(ParseUInt16("0", &n) && n == 0);
    BOOST_CHECK(ParseUInt16("1234", &n) && n == 1234);
    BOOST_CHECK(ParseUInt16("01234", &n) && n == 1234); 
    BOOST_CHECK(ParseUInt16("65535", &n) && n == static_cast<uint16_t>(65535));
    BOOST_CHECK(ParseUInt16("+65535", &n) && n == 65535);
    BOOST_CHECK(ParseUInt16("00000000000000000012", &n) && n == 12);