Hello, When I was poking arround my llvm code, I realised that given a Type there isn't a seperate container for the type operator functions. Am I correct? If so, wouldn't it make more sence to provide a container to put the objects operator function in to reduce the overhead of going through each non operator function to find the operator function defined for it?? The reason for this seperate container is because most of languages defined operators to manipulate objects. For example each time there is an expression: class int_t : some_custom_interger ; int_t a, b; ... a + b we have to do : O(n) const Type* ta = typeof("a"); for (int i=0, e=ta->getNumContainedTypes(); i<e; i++) if( isa<Function>(*ta->getContainedType(i)) ) if( ta->getName() == "$operator +" ) call(function, valueof("a"), valueof("b") ); where else we could do something like: O(1) enum { operator_add = 0, ... } ; call( typeof("a")->operator[operator_add], valueof("a"), valueof("b")); With best regards, -- Kasra