Возможно ли инициализировать статическую переменную с lambda?

Я пробовал это:

#include <map>

int main() {

  static std::map<int,int> myMap = [](){
    std::map<int,int> myMap;
    return myMap;
  };

}

Ошибка:

<stdin>: In function 'int main()':
<stdin>:8:3: error: conversion from 'main()::<lambda()>' to non-scalar type 'std::map<int, int>' requested

И да, я знаю, что я могу создать для него еще одну "нормальную" функцию ant, но lambdas не может инициализировать объекты таким образом.

Ответ 1

Да, это действительно возможно.

static std::map<int,int> myMap = [](){
  std::map<int,int> myMap;
  return myMap;
}();

Обратите внимание на () в конце. Вы назначаете myMap лямбда, но вы действительно хотите назначить его на результат лямбда. Вы должны назвать это для этого.