С++ 11 lambdas как аргументы функции по умолчанию

Я пишу функцию C + 11, которая принимает вызываемый как аргумент, и я бы хотел, чтобы этот аргумент по умолчанию был функцией no-op. Это моя лучшая попытка:

const std::function<void()> noop= [](){};
void f( int x, int y, std::function<void()> fn= noop ) { /* ... */ }

Мне интересно, предоставляют ли стандартные библиотеки функцию "noop" std для меня, или мне нужно написать свои собственные, как я уже выше? Мне также интересно, есть ли способ избежать явного называния функции "noop". Например:

void f( int x, int y, std::function<void()> fn= [](){} ) { /* ... */ }

не будет компилироваться (в Visual Studio 2012 Update 3), и не будет:

void f( int x, int y, std::function<void()> fn= std::function<void()>([](){}) ) { /* ... */ }

Ответ 1

Мне интересно, предоставляют ли стандартные библиотеки функцию "noop" std для меня, или мне нужно написать свои собственные, как я уже выше?

Нет, нет функций noop по умолчанию. В этом случае вы должны создать свой собственный (как вы делали с объектом noop functor).