Я не понимаю, где и почему квалификаторы отбрасываются.
#include <iostream>
#include <memory>
class A {
public:
void f() {};
};
template <typename Callable>
void invoker(Callable c) {
auto l = [=]() {
c(); // <------------------- Error
};
l();
}
int main() {
A a;
invoker(std::bind(&A::f, a));
return 0;
}
Я получаю ошибку компилятора в строке c ();:
ошибка: передача 'const std :: _ Bind (A)>' как 'this' аргумента '_Result std :: _ Bind ‹_Functor (_Bound_args ...)> :: operator () (_ Args && ...) [с _Args = {}; _Result = void; _Functor = std :: _ Mem_fn; _Bound_args = {A}] ’отбрасывает квалификаторы [-fpermissive] c ();
Обходные пути, которые я не понимаю:
Определите A :: f () как const: void f () const {};
bind()
ссылка на экземплярa
: invoker (std :: bind (& A :: f, std :: ref (a)));.Перейти к
lambda
черезref
: auto l = [&] () {
версия g ++:
g++ --version
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
mutable
- person Rerito   schedule 16.01.2018