Вы можете сделать это, например,
operator<<(std::cout, "hi");
Это выражение
int a = +(2, 3);
не выполняет operator+
. Сначала применяется оператор последовательности ,
, который дает 3
, а затем применяется унарный +
, который дает 3.
Вы не можете сделать это
int a = operator+(2, 3); // error
, потому что int
s являются фундаментальными типами.
Если у вас есть определенные пользователем типы S
, то следующие фрагменты имеют то же значение
S s{};
std::cout << s;
auto x = s + s;
, что и
S s{};
operator<<(std::cout, s);
auto x = operator+(s, s);
, предполагая, что операторы определенный для S
, будет вызван правильный оператор.