"Compile-time constant" doesn't imply that every call produces the same address, is it? You could e.g. do
foo(const T &a, const T &b); foo(current(), current());
, and both temporaries are required to have different addresses?