пятница, 4 марта 2011 г.

Move semantic supported

Теперь "asio samples" (в основном проект "echo_server" и менее "nmea_client") поддерживают C++0x move semantic (rvalue reference):
1) для тех компиляторов, что не поддерживают еще не законченный стандрат (в части rvalue reference и move semantic) - MS Visual C++ 2008 (9.0) - все остается по-прежнему (хвала "проклятому" препроцессору :)
2) для компиляторов с "достаточной" реализацией move semantic - MS Visual C++ 2010 (10.0), Intel C++ Compiler 12.x, GCC 4.5 - везде, где это допустимо используются rvalue references, std::move и, конечно же, std::forward (спасибо статьям Dave Abrahams в блоге C++Next.

Для Intel C++ Compiler 12.x в build/intel12/boost_1_46_patches/intel_rvalue_ref_on.patch содержится патч, который "включает" поддержку rvalue reference в Boost C++ Libraries 1.46 и, соответсвенно, в "asio samples" (используется boost-вский config.hpp).

Для GCC 4.5 ключ компиляции, ответственный за поддержку rvalue reference, включается непосредственно в *.pro-файлах (проекты для Qt Creator).
Для получения "реальной пользы" от поддержки move semantic необходимо установить Boost.Asio 1.5.1 (developer release) в Boost C++ Libraries 1.46 - только тогда "срабатывает" большинство move-constructor.

P.S. Ну и сами "asio samples", кончено же, лучше брать из SVN-репозитория (trunk).

Комментариев нет: