Здравствуйте Андрей Тарасевич, Вы писали:
АТ>"Работать замечательно" это никак не может. Этот код не должен компилироваться ни с 'using namespace std', ни без. Если он у тебя компилируется, то это действительно глюк компилятора.
Да да я извиняюсь. Просто я сначала писал шаблонный класс — не сработало, я подумал, что дело в шаблонах (VC++ не совсем хорошо с ними дружит) и уже начал писать вопрос в конфу, а потом обнаружил, что и без шаблонов не прет, а operator<< просто забыл переписать нормально. Короче вот точный код:
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
friend std::ostream& operator<< (std::ostream& os, const A& a);
friend bool operator < (A&, A&);
private:
int m_i;
};
bool operator < (A& a1, A& a2)
{
return (a1.m_i < a2.m_i);
}
std::ostream& operator<< (std::ostream& os, const A& a)
{
os << a.m_i;
return os;
}
void main()
{
}
И я по прежнему утверждаю, что VC++ выдает "error C2248: 'm_i' : cannot access private member declared in class 'A'". Но если я убираю "using namespace std;", то все компилиться без ошибок.
Далее хочу сказать, что operator<< и operator< я выбрал совершенно случайно, без всякого умысла, чисто для теста. И если, например, объявить (даже определять не надо) operator+ то компилер выдаст "fatal error C1001: INTERNAL COMPILER ERROR".