Почему здесь требуется конструктор копирования?

Рассмотрим следующий код:

struct S
{
    S() {}
    void f();
private:
    S(const S&);
};

int main()
{
    bool some_condition;
    S my_other_S;
    (some_condition ? S() : my_other_S).f();
    return 0;
}

gcc не может это скомпилировать, говоря:

test.cpp: In function 'int main()':
test.cpp:6:5: error: 'S::S(const S&)' is private
test.cpp:13:29: error: within this context

Я не понимаю, почему в этой строке должно происходить создание копии - цель состоит в том, чтобы просто вызвать f () либо в созданном по умолчанию экземпляре S , либо в my_other_S , т.е. он должен быть эквивалентен:

if (some_condition)
    S().f();
else
    my_other_S.f();

Чем отличается в первом случае и почему требуется ли конструктор копирования?

EDIT : Есть ли способ выразить «выполнить эту операцию над временным объектом на уже существующем объекте» в контексте выражения?

5
задан HC4 - reinstate Monica 29 March 2011 в 22:47
поделиться