Nomimally yes, the temporary one is built by default, and then a copy constructor is created to copy it to your t object.
However, in practice, a copy can be optimized - even if it has side effects (console output):
[n3290: 8.5/16] : [..] In some cases, the implementation is allowed to exclude copying inherent in this direct initialization by directly constructing the intermediate result in an initialized object; see 12.2, 12.8.
And (in combination with an example in the same sentence):
[n3290: 12.2/2] : [..] An implementation can use a temporary one that must build X (2) before passing it to f () using the X s copy constructor; alternatively, X(2) may be constructed in the space used to hold the argument. [..]
But the copy constructor must still exist, even if it cannot be called.
In any case, if you compile with optimizations disabled (or, with GCC, possibly -fno-elide-constructors ), you will see:
This is ctor This is copy-ctor
Lightness races in orbit
source share