Видны ли локальные функции-функции в лямбдах 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 возможно.)

Ответы на вопрос(4)

Ваш ответ на вопрос