#include <iostream>
using namespace std;
#ifdef _MSC_VER
#define __PRETTY_FUNCTION__ __FUNCSIG__
#endif
class Foo
{
public:
  Foo()
  {
    cout << __PRETTY_FUNCTION__ << endl;
  }
  Foo(Foo&&)
  {
    cout << __PRETTY_FUNCTION__ << endl;
  }
  explicit Foo(const Foo&)
  {
    cout << __PRETTY_FUNCTION__ << endl;
  }

};
void Bar(Foo & a) {}
int main() {
  const Foo f;
  const Foo &f2 = f;
  cout << "@@@@@@+" << endl;
  auto lambda = [f2, f3(f2)]() mutable {
    Bar(f3); //why f3沒保留const
    Bar(f2); //f2確有
  };
  cout << "@@@@@@-" << endl;
  lambda();
  // your code goes here
  return 0;
}