Boost logo

Boost :

Subject: [boost] [scope_exit] can MSVC lambdas capture data members?
From: lcaminiti (lorcaminiti_at_[hidden])
Date: 2012-03-14 14:44:31


Hello all,

Can anyone try the following code on a MSVC compiler with lambdas (MSVC10?)?

#include <vector>

struct person {};

struct world {
    void add_person(person const& a_person) {
        bool commit = false;
        persons_.push_back(a_person);

        auto scope_exit = [&commit, &persons_]() mutable -> void {
            if(!commit) persons_.pop_back();
        };

        commit = true;
        scope_exit();
    }

private:
    std::vector<person> persons_;
};

int main() {
    world w;
    person p;
    w.add_person(p);
    return 0;
}

This code compiles on GCC 4.5.3 with C++0x extensions (including lambdas)
but based on some errors I'm seeing in trunk's ScopeExit regressions tests,
I'm guessing it will fail using MSVC lambdas with errors similar to the
followings:

error C3480: 'world::persons_': a lambda capture variable must be from an
enclosing function scope
warning C4573: the usage of 'world::persons_' requires the compiler to
capture 'this' but the current default capture mode does not allow it

Unfortunately, I don't have a MSVC compiler with lambdas so thank you very
much for trying my code!
--Lorenzo

--
View this message in context: http://boost.2283326.n4.nabble.com/boost-scope-exit-can-MSVC-lambdas-capture-data-members-tp4472788p4472788.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk