Рассмотрим следующий код:
int main() {
void(*ptr)() noexcept = []() noexcept {
// ...
};
}
Он компилируется с помощью gcc / clang, но не компилируется с msvc.
Ошибка довольно неясна:
ошибка C2440: «инициализация»: невозможно преобразовать из «main ::» в «void (__cdecl *) (void) noexcept»
примечание: отсутствует пользовательский оператор преобразования, который может выполнить это преобразование, или оператор не может быть вызван
Все работает нормально, если я удаляю noexcept
следующим образом:
int main() {
void(*ptr)() = []() noexcept {
// ...
};
}
Насколько я вижу, код верен, и msvc должен принимать его так же, как gcc и clang. Что-то не так во фрагменте или это ошибка msvc?