Posted to c++ by avl at Tue Aug 01 13:36:59 GMT 2017view pretty

namespace TAO {
   class Any ;

   // at time of template definition, almost nothing is
   //  known about "Any".
   template < typename > struct Some {
      static inline void any_insert(Any *p , unsigned x ) { ( * p ) <<= x ; }
   };

   void operator<<= ( TAO::Any&,unsigned);

   class Any {
      //friend void operator<<=(TAO::Any&,unsigned);
      private:
         void operator<<= (unsigned char);
   };

}

main () {
   TAO::Any *a = 0;
   // by the time the template is used, the compiler knows about "Any".
   //   but ignores the void operator<<= ( TAO::Any&,unsigned);
   //   so it tries to cast the unsigned to unsigned char and 
   //   fails, because that is private.
   TAO::Some<void>::any_insert(a, 42);
}