Q:

Вызов оператора класса без создания его экземпляра (этого класса)

Вот пример который правильно работает. Только не могу понять почему вызов оператора () нормально отрабатывает без создания экземпляра класса. 
#include <iostream>

using namespace std;

struct sq {
    int operator()(int x) const {
        return x * x;
    }
};

int main(){
    cout << sq()(5) << endl; // здесь должна быть синтаксическая ошибка. экземпляр класса пока не создан

    return 0;
}

разъясните в чем мое заблуждение.

обновил чтоб понятней было
#include <iostream>

using namespace std;

struct sq {
    sq(){ cout << "constructor " << endl; }

    int operator()(int x) const {
        return x * x;
    }

    int print(int i){
        return i;
    }
};

int main(){
    cout << sq()(5) << endl; // правильно. создается временный объект
    cout << sq.print(10) << endl; // не правильно. здесь ошибка. объект не создается

    return 0;
}

A:

sq()(5)

Здесь вызывается конструктор sq() и таким образом создается временный объект, для которого уже выполняется operator() с аргументом 5. Ничего ошибочного тут не вижу.

