Я озадачен этим:
#include <iostream>
struct X {};
void f( const X &x ) { std::cerr << &x << "\n"; }
static X x;
int main()
{
f( x ); // Off stack address
f( false ? X() : x ); // Different address on stack.
}
Почему второй вызов f создает временную копию?
Изменить: Этот вопрос касается не только типа X, но и того факта, что копия сделана. Мне не хватало sublety из категорий значений из принятого ответа и ожидало, что f-параметр должен связываться либо с x, либо с X(), как это происходит при перефразировании этого выражения как оператора if.