Может ли лямбда иметь Extern «C» связь?

Это, кажется, работает на платформах, которые я пробовал:

#include 

// extern "C" linkage
extern "C" void foo(void (*fn_ptr)(int));

namespace {
  struct bar {
    static void f(int);
  };
}

int main() {
  // Usually works on most platforms, not guaranteed though:
  foo(bar::f);

  // Probably equally bad or worse?
  foo([](int x) { std::cout << x << std::endl; });
}

, но затем снова , проходящую статическую функцию элементов, также работал на этих платформах, когда она не была необходима для .

Есть ли способ заставить лямбда иметь подходящую связь, чтобы сделать это безопасным и портативным? Или это уже?

14
задан Community 23 May 2017 в 12:09
поделиться