macro_rules! fail {
($msg:literal) => { ... };
(($msg:literal), ($context:literal)) => { ... };
($fmtstr:literal, $($args:tt)*) => { ... };
(($fmtstr:literal, $($args:tt)*), ($context:literal)) => { ... };
(($fmtstr:literal, $($args:tt)*), ($contextfmt:literal, $($contextargs:tt)*)) => { ... };
}