http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46719
Kohei Takahashi <flast at flast dot jp> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |flast at flast dot jp --- Comment #3 from Kohei Takahashi <flast at flast dot jp> 2010-11-30 19:45:34 UTC --- The error is not bug because C++0x Lambda is not a std::function (or boost::function and so on...). C++0x Lambda is a unique, unnamed non-union class type. (written in n3126, 5.1.2.3. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf) Therefore compiler is unable to deduce template parameters that are Return, FirstType and ArgTypes. If you want to call function with implicitly template arguments deduction, you should use variable, cast or constructor call like following code. example: int main() { // using variable function< double( int ) > f = []( int x ) { return static_cast< double >( x ); }; curry( f, 10 ); // or casting curry( static_cast< function< double( int ) > >( []( int x ) { return static_cast< double >( x ); } ), 10 ); // or calling constructor curry( function< double( int ) >( []( int x ) { return static_cast< double >( x ); } ), 10 ); }