"check" expressions are only evaluated if enabled. "verify" expressions are always evaluated, but only cause an error if enabled. template void FORCENOINLINE UE_DEBUG_SECTION FDebug::CheckVerifyFailed(
const ANSICHAR* Expr,
const ANSICHAR* File,
int32 Line,
void* ProgramCounter,
const FmtType& Format,
Types... Args) { static_assert(TIsArrayOrRefOfTypeByPredicate::Value, "Formatting string must be a TCHAR array."); static_assert(TIsValidVariadicFunctionArg::Value && ...), "Invalid argument(s) passed to CheckVerifyFailed()"); return CheckVerifyFailedImpl(Expr, File, Line, ProgramCounter, (const TCHAR*)Format, Args...); } MSVC (v19.00.24215.1 at time of writing) ignores no-inline attributes on lambdas. This can be worked around by calling the lambda from inside this templated (and correctly non-inlined) function.