https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90321
Bug ID: 90321 Summary: [C++17] GCC allows structured binding (decomposition) of an object of type derived from a closure type Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: language.lawyer at gmail dot com Target Milestone: --- The bug 78896 was fixed in r244909, so it is no longer possible to decompose a closure itself, but deriving from a closure type makes it possible to access closure members through an object of the derived type: template<class F> struct hack : F { }; template<class F> hack(F) -> hack<F>; int main() { auto f = [x = 1, y = 2]() { }; // auto [a, b] = f; // error: cannot decompose lambda closure type 'main()::<lambda()>' auto [a, b] = hack { f }; return b; // returns 2 } https://wandbox.org/permlink/1ucU0A9vFyAI9yYh