У вас, кажется, есть небольшое недопонимание о том, как работают такие статические переменные. Похоже, вы думаете, что компилятор выдает один набор кода при первом вызове функции, а другой - каждый раз. Это не тот случай. Вы могли бы рассмотреть следующее преобразование.
bool initialized = false;
Config* c;
inline Config& config() {
if(!initialized) {
c = new Config();
initialized = true;
}
return *c;
}
Это упрощение, но оно помогает понять смысл. Функция отслеживает, была ли статическая инициализирована, и если нет, делает это. Он делает эту проверку каждый раз, когда вы вызываете функцию.
Имея это в виду, наличие статической переменной не оказывает прямого влияния на способность к встраиванию конкретной функции ... компилятор просто встроит проверку вместе со всем остальным. Вопрос заключается в том, отвечает ли этот новый расширенный код требованиям, предъявляемым компилятором для встраивания функции? Возможно, нет, но в любом случае видимый результат должен быть одинаковым.