Проблема в том, что ваше использование cout << bar::
приходит до того, как объявлена ваша перегрузка ostream<< bar::
, поэтому она не вызывает вашу перегрузку. Переместите определение вниз.
class bar {
public:
enum a { b, c, d };
static void print();
};
ostream& operator<< (ostream& os, bar::a var) {
...
void bar::print()
{
cout << b << endl;
}
РЕДАКТИРОВАТЬ: я вижу, что еще кто-то опубликовал это, когда я печатал это.