C ++: Можно ли оптимизировать неиспользуемый лямбда-явный захват?

У меня есть приличное количество кода, который опирается на захватshared_from_this() при использовании лямбда-выражения в качестве обратного вызова, чтобы убедиться, что мой экземпляр остается в живых:

std::shared_ptr self = shared_from_this();
auto doSomething = [this, self] ()
{
    // various statements, none of which reference self, but do use this
}

Итак, вопрос: так как я не ссылаюсьself внутри лямбда-тела позволяет ли совместимый компилятор оптимизировать захват?

Рассмотрим следующую программу:

#include 
#include 
#include 

std::function gFunc;

struct S : std::enable_shared_from_this
{
    void putGlobal()
    {
        auto self = shared_from_this();
        gFunc = [self] { };
    }
};

int main()
{
    auto x = std::make_shared();
    std::cout < x.use_count() < std::endl;
    x->putGlobal();
    std::cout < x.use_count() < std::endl;
}

Ответы на вопрос(1)

Ваш ответ на вопрос