Jensen's Device
en.wikipedia.org
en.wikipedia.org
There isn't a lot of support for this kind of thing in modern languages. Lambdas do come to mind, e.g. `swap(() => i, () => A[i])`, but few languages support returning lvalues from closures without significant boilerplate.
The original implementations were very bad: pass-by-name was not visible at the calling point, so any function call could suddenly break due to aliasing issues (or change the value of a local variable, which is also the case with pass-by-reference). I am not aware of any widely used modern languages that implement it outside of macros (including C preprocessor macros, LISP, etc.)
The original concept has been refined over time and made its way into other languages though, in the form of callbacks, continuations, etc.
Scala. Call-by-name that is invisible at the call point. It doesn't cause aliasing issues because it's treated like getting passed a lambda, but if any of the code has side effects you can be very surprised about when they occur.