gsl::fail_fast 在命名空间中找不到

gsl::fail_fast not found in the namespace

在这个简单的C++契约的使用中,我得到了error: no type named 'fail_fast' in namespace 'gsl'。 try 块会抛出 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';
    }
}

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

Header file gsl_assert.h only defines gsl::fail_fast exception with GSL_THROW_ON_CONTRACT_VIOLATION defined. So it compiles now? – Serve Laurijssen

有一段时间 gsl::fast_fail 仅在定义 GSL_THROW_ON_CONTRACT_VIOLATION 时定义,但是在 #267 and subsequently fixed in #268 中被识别出来。