// Odd egcs behavior with template-friend functions. #include template class meta_info { friend bool operator==<> ( const meta_info&, const meta_info& ); friend meta_info metaid<> ( const T& ); meta_info& operator=(const meta_info& ); // no assignment. meta_info ( const meta_info& ); // no cpy ctor meta_info() {} // only friends can create // the class. public: }; template bool operator== ( const meta_info&, const meta_info& ) { return false; } template inline meta_info metaid ( const T& ) { meta_info mi; return mi; } class meta_info { public: static long max () throw() { return 42; // should be: return std::numeric_limits::max(); } }; int main (int, char **) { int n = 5; printf ("meta_info::max() is: %i\n", metaid(n).max() ); return 0; }