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_EQUAL(SpanToStr(sp), "");
    
    input = "Foo(Bar(xy,z()))";
    sp = input;
    success = Func("FooBar", sp);
    BOOST_CHECK(!success);
    success = Func("Foo(", sp);
    BOOST_CHECK(!success);
    success = Func("Foo", sp);
    BOOST_CHECK(success);
    BOOST_CHECK_EQUAL(SpanToStr(sp), "Bar(xy,z())");
    success = Func("Bar", sp);
    BOOST_CHECK(success);
    BOOST_CHECK_EQUAL(SpanToStr(sp), "xy,z()");
    success = Func("xy", sp);
    BOOST_CHECK(!success);
    
    Span<const char> result;
    input = "(n*(n-1))/2";
    sp = input;
    result = Expr(sp);
    BOOST_CHECK_EQUAL(SpanToStr(result), "(n*(n-1))/2");
    BOOST_CHECK_EQUAL(SpanToStr(sp), "");
    input = "foo,bar";
    sp = input;
    result = Expr(sp);
    BOOST_CHECK_EQUAL(SpanToStr(result), "foo");
    BOOST_CHECK_EQUAL(SpanToStr(sp), ",bar");
    input = "(aaaaa,bbbbb()),c";
    sp = input;