Я получаю странную ошибку изнутри boost :: asio, когда просто включаю asio.hpp
заголовочный файл, который затем включает другие заголовки до win_static_mutex.ipp
в пределах которого он генерирует ошибку преобразования.
Я использую MinGW с GCC 4.7 с флагом компилятора -std = gnu ++ 11 (см. Вот почему gnu ++ 11 а не c ++ 11). Ошибка возникает в бусте 1.49, 1.50 и 1.51 (ток).
Полный ошибка гласит следующее:
In file included from boost1.49/boost/asio/detail/win_static_mutex.hpp:71:0,
from boost1.49/boost/asio/detail/static_mutex.hpp:23,
from boost1.49/boost/asio/detail/impl/signal_set_service.ipp:24,
from boost1.49/boost/asio/detail/signal_set_service.hpp:210,
from boost/asio/signal_set_service.hpp:19,
from boost/asio/basic_signal_set.hpp:24,
from boost/asio.hpp:26,
from MyCode\Client.cpp:3:
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp: In member function 'int boost::asio::detail::win_static_mutex::do_init()':
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'const wchar_t*' to 'size_t {aka unsigned int}' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'unsigned int' to 'const wchar_t*' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:53:10: warning: declaration of 'mutex' shadows a global declaration [-Wshadow]
Как я сказал в начале, единственное, что я делаю в мой код в том числе asio.hpp
заголовок:
#include <boost/asio.hpp>
Линии 43-53 от подталкивание-х win_static_mutex.ipp
файл (я пометил строку 51):
using namespace std; // For sprintf.
wchar_t mutex_name[128];
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
swprintf_s(mutex_name, 128,
#else // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
swprintf(mutex_name,
#endif // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
L"asio-58CCDC44-6264-4842-90C2-F3C545CB8AA7-%u-%p",
static_cast<unsigned int>(::GetCurrentProcessId()), this); // line 51
HANDLE mutex = ::CreateMutexW(0, TRUE, mutex_name);
Есть ли сейчас какие-то определения, которые я должен определить, или любые другие флаги компилятора, или нужно что-то менять напрямую в boost или это скорее что-то с MinGW, которое нужно изменить?
Кажется, это ошибка в Boost. Вы можете попробовать обновить Boost до более поздней версии (доступна версия 1.51) и надеяться, что она там исправлена, в противном случае вы должны сообщить об этом как об ошибке.
Одно уродливое «решение» — установить флаг компилятора. -fpermissive
,
На данный момент я вижу только это «решение», и нужно подождать, пока boost снова не догонит GCC 4.7.0 …