> auto BAIL = [p](void) -> long return bool { strcpy(p, "0000000000000000"); return false; };

Or you can use something like std::scope_success/failed:

```
template <typename Func>                                                        
class scope_guard                                                              
{                                                                              
    Func func_;                                                                
    bool active_;                                                              
                                                                               
public:                                                                        
    explicit scope_guard(Func&& func)                                      
    : func_(std::move(func))                                                              
    , active_(true)                                                            
    {                                                                          
    }                                                                          
    ~scope_guard() { if (active_) func_(); }                                    
                                                                               
    void dismiss() { active_ = false; }                                        
};

bool Serial(char *const p)
{
    scope_guard on_error([&]{ strcpy(p, "0000000000000000"); });

    if (<error>) return false;

    if (<another-error>) return false;

    on_error.dismiss();
    return true;
}
```