2012-02-21 4 views
1

Могут ли современные компиляторы C++ (включая gcc) оптимизировать следующий (макроподобный) код?Оптимизация компилятора C++

template<typename F, typename ...A> 
    err foo(F fn, A&&... args) 
    { 
     return fn(std::forward<A>(args)...) ? get_last_error() : err(); 
    } 

Например, она может оптимизировать следующий код

return foo(test, 5, 20, "bar"); 

к:

return test(5, 20, "bar") ? get_last_error() : err(); 
+3

Попробуйте и убедитесь! 'gcc -O2 -S' - ваш друг. – zwol

+5

Вы спрашиваете, способны ли современные компиляторы инкрустировать ..? – ildjarn

+0

Да. Вставка функции с параметрами вариационного шаблона. –

ответ

2

, что вы описываете, называется "совершенным экспедиторская" (это термин для Google, если вы хотите узнать больше об этом), а C++ 11 поддерживает его благодаря r-значениям ссылок. Поэтому ответ «да», он будет полностью оптимизирован.