#c #boost #64-bit #visual-studio-2019
#c #повышение #64-разрядный #visual-studio-2019
Вопрос:
у меня странная ошибка компиляции при попытке связать простое приложение с boost и libunistd. Теперь оба соответствуют x64, мои библиотеки ссылок :
libboost_filesystem-vc142-mt-sgd-x64-1_75.lib
libboost_system-vc142-mt-sgd-x64-1_75.lib
libboost_thread-vc142-mt-sgd-x64-1_75.lib
libunistd.lib
libportable.lib
использование флагов :
BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
BOOST_ASIO_ENABLE_HANDLER_TRACKING
Но я продолжаю получать :
C:Devmycpplibsboost_1_75_0boostdate_timegregorian_calendar.ipp(77,1): error C2666: '-': 17 overloads have similar conversions
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(855,17): message : could be '_uint128 operator -(const _uint128 amp;,unsigned short)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(852,17): message : or '_uint128 operator -(const _uint128 amp;,short)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(849,17): message : or '_uint128 operator -(const _uint128 amp;,unsigned int)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(846,17): message : or '_uint128 operator -(const _uint128 amp;,int)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(843,17): message : or '_uint128 operator -(const _uint128 amp;,unsigned long)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(840,17): message : or '_uint128 operator -(const _uint128 amp;,long)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(837,17): message : or '_uint128 operator -(const _uint128 amp;,unsigned __int64)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(834,17): message : or '_uint128 operator -(const _uint128 amp;,__int64)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(830,17): message : or '_int128 operator -(const _int128 amp;,unsigned short)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(827,17): message : or '_int128 operator -(const _int128 amp;,short)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(824,17): message : or '_int128 operator -(const _int128 amp;,unsigned int)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(821,17): message : or '_int128 operator -(const _int128 amp;,int)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(818,17): message : or '_int128 operator -(const _int128 amp;,unsigned long)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(815,17): message : or '_int128 operator -(const _int128 amp;,long)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(812,17): message : or '_int128 operator -(const _int128 amp;,unsigned __int64)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(809,17): message : or '_int128 operator -(const _int128 amp;,__int64)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(347,17): message : or '_uint128 operator -(const _uint128 amp;,const _uint128 amp;)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(342,17): message : or '_uint128 operator -(const _uint128 amp;,const _int128 amp;)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(337,16): message : or '_int128 operator -(const _int128 amp;,const _uint128 amp;)'
1>C:Devmycpplibslibunistd-masterunistdint128Int128.h(332,16): message : or '_int128 operator -(const _int128 amp;,const _int128 amp;)'
1>C:Devmycpplibsboost_1_75_0boostdate_timegregoriangreg_duration.hpp(119,17): message : or 'boost::gregorian::date_duration boost::gregorian::operator -(boost::gregorian::date_duration,const boost::gregorian::date_duration amp;)' [found using argument-dependent lookup]
1>C:Devmycpplibsboost_1_75_0boostdate_timegregorian_calendar.ipp(77,1): message : or 'built-in C operator-(int, int)'
1>C:Devmycpplibsboost_1_75_0boostdate_timegregorian_calendar.ipp(77,1): message : while trying to match the argument list '(int, const MonthType)'
1> with
1> [
1> MonthType=boost::gregorian::greg_month
1> ]
1>C:Devmycpplibsboost_1_75_0boostdate_timegregorian_calendar.ipp(76): message : while compiling class template member function 'unsigned int boost::date_time::gregorian_calendar_base<boost::gregorian::greg_year_month_day,unsigned int>::day_number(const boost::date_time::year_month_day_base<boost::gregorian::greg_year,boost::gregorian::greg_month,boost::gregorian::greg_day> amp;)'
1>C:Devmycpplibsboost_1_75_0boostdate_timedate.hpp(75): message : see reference to function template instantiation 'unsigned int boost::date_time::gregorian_calendar_base<boost::gregorian::greg_year_month_day,unsigned int>::day_number(const boost::date_time::year_month_day_base<boost::gregorian::greg_year,boost::gregorian::greg_month,boost::gregorian::greg_day> amp;)' being compiled
1>C:Devmycpplibsboost_1_75_0boostdate_timegregoriangreg_calendar.hpp(28): message : see reference to class template instantiation 'boost::date_time::gregorian_calendar_base<boost::gregorian::greg_year_month_day,unsigned int>' being compiled
это часть наддува, которую он постоянно терпит неудачу:
template<typename ymd_type_, typename date_int_type_>
BOOST_CXX14_CONSTEXPR
inline
date_int_type_
gregorian_calendar_base<ymd_type_,date_int_type_>::day_number(const ymd_typeamp; ymd)
{
unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
unsigned short y = static_cast<unsigned short>(ymd.year 4800 - a);
unsigned short m = static_cast<unsigned short>(ymd.month 12*a - 3);
unsigned long d = ymd.day ((153*m 2)/5) 365*y (y/4) - (y/100) (y/400) - 32045;
return static_cast<date_int_type>(d);
}
и это int128, который продолжает терпеть неудачу
Ответ №1:
Эти операторы разработаны с учетом единообразно типизированных аргументов:
inline _uint128 operator-(const _uint128 amp;lft, const _int128 amp;rhs)
Существует также оператор C по умолчанию, который занимает две int
секунды. Если ymd.month
имеет тип _int128
или преобразуется в него, выражение (14-ymd.month)
является неоднозначным, поскольку для любой замены потребуется равное количество преобразований типа.
Вы должны int
явно преобразовать операнд.
Комментарии:
1. куда конвертировать, поскольку я имею дело с 2 библиотеками с открытыми исходными кодами