--- a/cmajor++/Cm/Cm.Core/Argument.hpp
+++ b/cmajor++/Cm/Cm.Core/Argument.hpp
@@ -51,7 +51,19 @@
 
 typedef std::vector<ArgumentReferenceConversion> ArgumentReferenceConversionVector;
 
-void TypeCheckArgs(ExpressionList& arguments, TypeCheckContext& context, const Position& pos);
+enum class TypeCheckArgumentFlags { none = 0, acceptFunctionSet = 1, checkStaticMemFun = 2 };
+
+inline TypeCheckArgumentFlags operator|(TypeCheckArgumentFlags left, TypeCheckArgumentFlags right)
+{
+    return TypeCheckArgumentFlags(int(left) | int(right));
+}
+
+inline TypeCheckArgumentFlags operator&(TypeCheckArgumentFlags left, TypeCheckArgumentFlags right)
+{
+    return TypeCheckArgumentFlags(int(left) & int(right));
+}
+
+void TypeCheckArgs(ExpressionList& arguments, TypeCheckContext& context, Function* function, const Position& pos, TypeCheckArgumentFlags flags);
 
 void CheckArgsVsParams(const ObjectPtr& forObject, const ArgumentVector& args, ExpressionList& arguments, const ParameterList& params,
     bool invokeMemberFunction, ArgumentReferenceConversionVector& referenceConversions, Function* ownerFunction);