My question is, given: boost::function< int (char, long) > func(&f); how is it possible to pass the (char,long)? (I tried to receive this in a template as a single template param, or as three , but neither worked) I have been studying the headers, but the indirection used (FTSE :) ) is making it hard for me to figure this one out. The reason I am asking I is I am trying to clean up the syntax of some template params and I would like to use this technique. i.e. I would like to write: struct A {}; struct B {}; struct C {}; struct D {}; struct E {}; struct F {}; typedef MyThingdef< (A,B), (C,D), (E,F) > splat; instead of typedef MyThingdef< A,B, C,D, E,F > splat; Any direction on things to research or dig into appreciated. Thanks Brian