I agree with you both, but I don’t know how to resolve it.
There can be a return value, there could be a returned tuple, void or noreturn.
After playing around with it, I think noreturn is more appropriate, with the custom type we have false positives, according to lang doc everything is compatible with no return, so we can consistently trigger the error message from call, the code also gets a bit more simple.
With noreturn we always get the error message as the first error and this error reads much clearer then the not used error which can be wrong and misleading, further the NoMatchingOverload also causes our compile error to be displayed second and its “referenced by” section gets elided we have to manually supply -freference-trace
to see it, with noreturn we always see the “referenced by” for our “No Overload found …” message.
I probably came up with the NoMatchingOverload type because somewhere in my mind I am probably still used to hacky c++ template stuff, but noreturn seems cleaner, more consistent and more ziggy. That said, I don’t know a lot about noreturn or all the places where it is used, so I am not entirely sure, if I understand it completely or if there are semantic nuances about it, I might not be aware of.
@AndrewCodeDev you can just use it, maybe just add a link to this topic?