Видны ли локальные функции-функции в лямбдах C ++ 0x?
мы столкнулись со странной проблемой. Следующий упрощенный код воспроизводит проблему в MSVC 2010:
template
struct dummy
{
static T foo(void) { return T(); }
};
int main(void)
{
typedef dummy dummy_type;
auto x = []{ bool b = dummy_type::foo(); };
// auto x = []{ bool b = dummy::foo(); }; // works
}
typedef
Я создал локально в функции неКажется, что он виден в лямбде. Если я заменюtypedef
с фактическим типом, он работает как ожидалось.
Вот еще несколько тестов:
// crashes the compiler, credit to Tarydon
int main(void)
{
struct dummy {};
auto x = []{ dummy d; };
}
// works as expected
int main(void)
{
typedef int integer;
auto x = []{ integer i = 0; };
}
Я неу меня есть g ++, чтобы проверить это прямо сейчас. Это какое-то странное правило в C ++ 0x или просто ошибка в компиляторе?
Из приведенных выше результатов яЯ склоняюсь к ошибке. Хотя сбой определенно является ошибкой.
На данный момент я подал дваотчеты об ошибках.
Все приведенные выше фрагменты кода должны быть скомпилированы. Ошибка связана с использованием разрешения области в локально определенных областях. (Замеченоdvide.)
И ошибка в краше связана с ... кто знает. :)
ОбновитьСогласноотчеты об ошибкахони оба были исправлены в следующем выпуске Visual Studio 2010. (Хотя это некажется, это так; VS11 возможно.)