C ++ compiladores podem embutir um ponteiro de função?

Suponha que eu tenho uma funçãofunctionProxy que usa um parâmetro genéricofunction e chame seuoperator():

template< typename Function > void functionProxy( Function function ) {
    function();
}

O objeto passado para ele pode ser:

um functor:

struct Functor {
    void operator()() const {
        std::cout << "functor!" << std::endl;
    }
};

uma função:

void function( ) {
    std::cout << "function!" << std::endl;
}

uma função lambda (C ++ 0x):

[](){ std::cout << "lambda!" << std::endl; }
int main( )
{
    functionProxy( Functor() );
    functionProxy( function );
    functionProxy( [](){ std::cout << "lambda!" << std::endl; } );
    return 0;
}

O compilador será capaz de incorporarfunction dentrofunctionProxy em todos os casos acima?

questionAnswers(5)

yourAnswerToTheQuestion