Что это за ошибка компилятора при использовании лямбда-выражения в качестве параметра шаблона?
Ноябрь. 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
Мобильная версия