Лямбда, возвращающая лямбду, неправильно определяет тип возвращаемого значения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Лямбда, возвращающая лямбду, неправильно определяет тип возвращаемого значения?

Сообщение Anonymous »

Этот вопрос является продолжением моего недавнего вопроса:

Что это за ошибка компилятора при использовании лямбда-выражения в качестве параметра шаблона?

Ноябрь. 11, 2014: В ответ Microsoft сообщила, что исправление этой ошибки должно появиться в следующем основном выпуске Visual C++.



Этот код не удалось скомпилировать с использованием VS2012 (обновление 2):

Код: Выделить всё

int main(int argc, char* argv[])
{
auto f = []()
{
int n = 0;
auto r = [=]{ return n; };
return r;
};
return 0;
}


Вот какую ошибку компилятор я получаю:

Код: Выделить всё

1>  main.cpp
1>C:\test\main.cpp(7): error C2440: 'return' : cannot convert from 'main::::()::' to 'int (__cdecl *)(void)'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

  • Есть ли проблема с кодом согласно спецификации C++11?< /li>
    Возникла ли проблема с кодом в соответствии с определенной в VS2012 частичной поддержкой C++11?
  • Или это ошибка компилятора VS2012 C++?
  • Или это ошибка компилятора C++ VS2012?
  • Есть ли проблема с кодом в соответствии с определенной в VS2012 частичной поддержкой C++11?
  • Или это ошибка компилятора C++ VS2012?
  • Есть ли проблема с кодом в соответствии с определенной в VS2012 частичной поддержкой C++11?
  • Или это ошибка компилятора C++ VS2012?
  • Есть ли проблема с кодом, определенным в VS2012 частичной поддержкой C++11?
  • Или это ошибка компилятора C++ VS2012?
  • li>

  • Может ли кто-нибудь указать мне на место в спецификации C++11, где говорится о том, что лямбда-выражения должны быть неявно преобразованы в указатели на функции?


    Я помню, что это относится только к лямбдам без сохранения состояния — с пустыми предложениями захвата — внутренняя лямбда r равна нет
  • Так почему Похоже ли, что предполагаемый тип возвращаемого значения лямбды f является указателем на функцию, а именно int (__cdecl *)(void)?


Подробнее здесь: https://stackoverflow.com/questions/167 ... eturn-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»