2016-05-19 2 views
0

Я только «повышен» MSVC2015 для обновления 2 и столкнулся с boost::asioissue 12115 ...Visual Studio или boost :: asio bug?

Я рад сказать, что обходной путь описан в boost issue 12115 т.е. удаление service_has_move от линии 43 из basic_io_object.hpp работает отлично изменить:

#if defined(BOOST_ASIO_HAS_MOVE) 
... 
static const bool value = 
    sizeof(service_has_move::eval(
    static_cast<service_type*>(0), 
    static_cast<implementation_type*>(0))) == 1; 
... 
#endif // defined(BOOST_ASIO_HAS_MOVE) 

в

#if defined(BOOST_ASIO_HAS_MOVE) 
... 
static const bool value = 
    sizeof(eval(
    static_cast<service_type*>(0), 
    static_cast<implementation_type*>(0))) == 1; 
... 
#endif // defined(BOOST_ASIO_HAS_MOVE) 

Я не большой поклонник редактирования библиотек, особенно не boost!
Так может кто-нибудь, пожалуйста, скажите мне, действительно ли это вопрос boost или проблема MSVC2015 меняется на move поведение в обновлении 2?

FYI, исходный код компилируется и работает отлично под MSVC2015 Update 1 и MinGW 4.9.2 (на Windows 10) и GCC 5.3.1 (на Fedora), используя как boost1.60.0 и 1.61.0.
Я в настоящее время использую boost1.61.0, но boost issue 12115 был поднят на boost1.60.0.

+0

Что вы подразумеваете под «по вине»? Зачастую это субъективно или неоднозначно. Может быть, лучше спросить вопрос программирования или описать какую-то конструктивную цель. –

+0

Извините @ChrisBeck Меня раздражало, что код больше не компилируется после «обновления». Я отредактировал вопрос, чтобы решить конкретную проблему перемещения MSVC2015 Update 2'. Я также сообщил об этой проблеме Microsoft. – kenba

ответ

0

Я думаю, что это довольно очевидно, кто виноват. Если вам нужно было что-то удалить в boost, чтобы исправить это, тогда boost будет виноват, нет? Макрос BOOST_ASIO_HAS_MOVE определен на основе обнаружения компилятора в заголовках (-ов) форматирования. Очевидно, что при обновлении версия компилятора и другая информация, на которую полагаются эти заголовки, не совпадают, поэтому пространство имен, которое вы должны были удалить, не было определено.