Also, it depends on which language you're using...
$ irb
irb(main):001:0> a = 1
=> 1
irb(main):002:0> b = 2
=> 2
irb(main):003:0> b, a = a, b
=> [1, 2]
irb(main):004:0> puts "#{a} #{b}"
2 1
=> nil
(obviously this has the same flaw you mention, the interpreter is doing stuff for you. It follows the letter of the 'no intermediate variables' only.)