module pattern.optionals; import pattern.base; template optional(alias pattern) if(__traits(compiles, asPattern!pattern)) { enum optional = function string(string input) { string result = asPattern!pattern(input); return result ? result : ""; }; } version(unittest) { import pattern.primitives; } unittest { enum c = optional!(primitive!("a", "b", "c")); assert(c("cat") == "c"); assert(c("dog") == ""); }