Sunday, May 24, 2009

C++ 0x

Поставил себе gcc 4.5 из лямбда бранча. Поиграюсь пока с тем, что успели реализовать из С++0x.
Заодно на виртуальную машину поставил windows7 + msvs 2010beta. Там тоже частично реализован C++0x (lambda, auto, static_assert).
Интересно сравнить подоходы реализации тех же лямбд и замыканий у микрософта и gcc.

Пока что нашёл баг в студии.
В таком коде
auto a = []() { return [](){return 0.0f;}; };

Компилятор ругается, что лямбда верхнего уровня имеет возвращаемый тип void, поэтому функция не должна ничего возвращать. Но ведь тип возвращаемого значения должен выводится, если он не указан, а не считаться что он void?

gcc на этой строчке вообще умирает с sigsegv

upd.
Ещё баг в gcc нашёл.
Такой вот код:

function Foo::GetEventHandler()
{
return [=](){this->onSomeEvent();};
}

при попытке вызова функтора получим sigsegv, так как this почему-то в лямбду захватывается нулевой.

если написать вот так:

return [this](){this->onSomeEvent();};
то всё ок.

в vc10 корректно работают оба варианта

No comments: