Этот код не должен компилироваться - это ошибка (или глупое расширение) в VS. GCC также должен отказаться от этого. Оператор недоступен в том объеме, в котором он используется.
Комо относится к этому правильно:
"ComeauTest.c", line 28: error: function "A::operator<<(const T &) [with T=int]"
(declared at line 14) is inaccessible
a << 4;
РЕДАКТИРОВАТЬ: соответствующий стандартный фрагмент, от 13,3 / 1
[Примечание: функция, выбранная
разрешение перегрузки не гарантируется
быть подходящим для контекста.
Другие ограничения, такие как
доступность функции, может
использовать его в контексте вызова
плохо сформирован. ]