Hi Barend,

We had discussed this at some point when I was working on variants. Basically, concept checking can only be done once you have a concrete geometry. Apparently right now there's a specialization for variant that does nothing and thus allows the free function check to pass. I don't remember having written that so I need to check but it looks a bit hacky: check in free function, potentially doing nothing if it's a variant, and then check again in resolve_variant to have the concrete geometries properly checked if a variant was passed initially.

It's better to have everything done at one place, and that's possible only once the variants (if any) are resolved. So the workflow is: resolve variant -> check concepts -> resolve default strategy -> dispatch.

So this is litterally "as early as possible", at least if we don't want to hack around. I know it can make the error messages a bit less clear. Does that impact them heavily on MSVC?

Regards
Bruno