在tee.hpp中提升断言'result1 ==n && result2 == n'

boost assertion 'result1 ==n && result2 == n' in tee.hpp

本文关键字:result1 result2 断言 hpp tee      更新时间:2023-10-16

我是使用boost的新手运行程序时,断言result1 == n && result2 == n失败

源文件地址

问题是什么?我该如何解决问题谢谢

这意味着写入tee流的其中一个分支失败:

std::streamsize write(const char_type* s, std::streamsize n)
{
    BOOST_STATIC_ASSERT((
        is_convertible<
            BOOST_DEDUCED_TYPENAME iostreams::category_of<Device>::type, output
        >::value
    ));
    std::streamsize result1 = iostreams::write(dev_, s, n);
    std::streamsize result2 = iostreams::write(sink_, s, n);
    (void) result1; // Suppress 'unused variable' warning.
    (void) result2;
    assert(result1 == n && result2 == n);
    return n;
}

您可以看到,如果两次写入都按预期工作,则result1result2都应该匹配n

如果您使用的流实现专门记录了另一个后置条件,则它与 Boost Iostreams 不兼容,您必须将其包装在"执行所需操作"的流类中,以使其满足本assert中表达的期望。

当然,它可以像"ENOENT"(磁盘已满)发生一样简单,或者网络流失败(例如,由于对等断开)