1

在这个 C++ 合约的简单使用中,我得到了error: no type named 'fail_fast' in namespace 'gsl'. 尝试块会抛出fast_fail异常或其他异常吗?

#define GSL_THROW_ON_CONTRACT_VIOLATION
#include <gsl/gsl>
#include <iostream>


int main(void)
{
    try {
        Expects(false);
    }
    catch(const gsl::fail_fast &e) {
        std::cout << "exception: " << e.what() << '\n';
    }
}
4

1 回答 1

4

GSL_THROW_ON_CONTRACT_VIOLATIONgsl::fast_fail版本 v3.0.0开始从 Microsoft GSL 中删除。std::terminate除非您在其调用的 MSVC 的内核模式下构建,否则所有违反合同的行为都会导致调用__fastfail.

头文件 gsl_assert.h 只定义了定义了 GSL_THROW_ON_CONTRACT_VIOLATION 的 gsl::fail_fast 异常。所以它现在编译?– 为劳里森服务

有一段时间,gsl::fast_fail仅在定义时才GSL_THROW_ON_CONTRACT_VIOLATION定义,但是在#267中确定并随后在#268中修复。

于 2021-07-08T17:41:23.617 回答