Вот есть такая штука:
template<class F>
void foo(F f) {
for(int i = 0; i < 100; i++)
f(i);
}
Наверное, это очевидно, но gcc не инлайнит¹ вызов f
, если f
- это функция. Поэтому приходится писать
template <void f(int)>
void foo() { /* ... */ }
Либо оборачивать f
в какую-нибудь лямбду или класс с оператором ()
.
1) На самом деле инлайнит, если foo()
используется только один раз в коде.