Почему Visual Studio 2010 выдает эту ошибку с Boost 1.42.0? - PullRequest
4 голосов
/ 22 апреля 2010

Я пытаюсь перекомпилировать приложение, которое прекрасно компилируется с уровнем предупреждения 4 в Visual Studio 2005 и Visual Studio 2008. Поскольку ошибки (см. Ниже) исходят из std: tr1, я думаю, что есть некоторый конфликт, ноне уверен, как исправить.Моей первой мыслью было удалить все ссылки на boost, например, но потом я получаю сообщение об ошибке, что не удается найти метод форматирования.Так вот одна из ошибок: (не уверен, что это значит) Есть идеи, предложения, решения?Спасибо!

РЕДАКТИРОВАТЬ: В самом начале я вижу сообщение: Неизвестная версия компилятора - пожалуйста, запустите тесты конфигурации и сообщите результаты

РЕДАКТИРОВАТЬ 2: кусок кода, который, я думаю, вызывает эту ошибку:(изменено, чтобы защитить невинных) EDIT3: я обновил сообщение об ошибке, то есть добавил больше .. однако я получаю гораздо больше сообщений об ошибках, таких как этот ... так что есть большая проблема / проблема.

 !m_someMap.insert( std::make_pair( "somestring", SomeClass::isTrue ) ).second
....
.....
 inline bool isTrue ( const IDog & dog ) { return s.IsDogTrue(); }



1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(197): error C2752: 'std::tr1::_Remove_reference<_Ty>' : more than one partial specialization matches the template argument list
1>          with
1>          [
1>              _Ty=bool (__cdecl &)(const IDog &)
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(356): could be 'std::tr1::_Remove_reference<_Ty&&>'
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(350): or       'std::tr1::_Remove_reference<_Ty&>'
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(962) : see reference to class template instantiation 'std::tr1::remove_reference<_Ty>' being compiled
1>          with
1>          [
1>              _Ty=bool (__cdecl &)(const IDog &)
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(26) : see reference to class template instantiation 'std::tr1::decay<_Ty>' being compiled
1>          with
1>          [
1>              _Ty=bool (__cdecl &)(const IDog &)
1>          ]
1>         C:\(PATH)\...(915) : see reference to class template instantiation 'std::tr1::_Unrefwrap<_Type>' being compiled
1>          with
1>          [
1>              _Type=bool (__cdecl &)(const IDog &)
1>          ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(965): error C2528: 'abstract declarator' : pointer to reference is illegal
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(349): error C2528: 'type' : pointer to reference is illegal
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(967) : see reference to class template instantiation 'std::tr1::add_pointer<_Ty>' being compiled
1>          with
1>          [
1>              _Ty=bool (__cdecl &)(const IDog &)
1>          ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(197): error C2752: 'std::tr1::_Remove_reference<_Ty>' : more than one partial specialization matches the template argument list
1>          with
1>          [
1>              _Ty=bool (__cdecl &)(const char *,int,const char *,std::string &)
1>          ]

Ответы [ 2 ]

8 голосов
/ 06 мая 2010

проблема в Visual Studio 2010, или я должен сказать, что с дополнительными шаблонами, которые были добавлены в Visual Studio 2010 tr1, поэтому std :: make_pair не всегда работает.изменилось на пару <> и все ошибки волшебным образом исчезли.

поэтому, если у вас есть проблемы с шаблоном в VC2010 и при использовании std: make_pair, измените его на пару <> и укажите параметры шаблона.

0 голосов
/ 22 апреля 2010

Похоже, Visual Studio может делать то, что вы не знаете. Я думаю, вы можете использовать компилятор Microsoft с IDE code :: blocks . Вы можете попробовать каждый компилятор (VS 2005/2008/2010). Кроме того, попробуйте использовать diff из вашего репозитория исходного кода, чтобы убедиться, что Microsoft не «предварительно проверила» ваш код.

Примечание. Вам не нужно использовать Code :: Blocks после выяснения проблемы. Это может быть хорошим инструментом для решения этой конкретной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...