None of those functions will compile, since either the type of lambda differs sufficiently from the type specified to the std::function template (func1, func3) or the definition of the arrays are illegal (func2, func3.)
Array sizes must be specified with a compile time constant. You may want to disable the non-standard compiler extension that is allowing it.
When you have a question, provide code that actually reproduces the problem. These functions capture this but in your snippet they are not member functions and there is no this for them to capture.
[Edit: And after refreshing, I see you've made some edits so this post isn't quite accurate in the specifics any more, but -- close enough.]