in my opinion, handling the condition of the elvis operator should never throw a exception.
in a language that supporting the safe operator and the elvis operator your argument is perhaps valid (not in my opinion), but with railo we decided against the safe operator.
In Railo i see the elvis operator as shortcut of the tenary operator, take this example:
you get exactly the same result!
or should the function isNull throw a exception when b does not exists? Perhaps,then a.b.c is not existing and not null.
Please have in mind that (when full null support is disabled), null and not existing is the same in CFML (in most cases).
I gave that implementation a lot of thoughts before i have implemented that way, so it was not by accident and it is not a bug, it was my decision to do it that way, for me this is simply was the right way to go.
the question matters to me was not, how does groovy do it? it was how will users will use that functionality, does it matter for the users if only part of it exist.
And i'm sure for most users in most cases it does not matter at all, they are only interested if "c" exist and has a value (in your example), nothing else.
i saw a lot of variables checks in the past (with isdefined,parameterexists,structkeyExists,isNull,<cfparam> ...), but in nearly all cases it was about all or nothing. so the groovy behavior is simply not helping in most cases.