2009-05-23 4 views
0

J'utilisais Boost 1.38, et je viens de passer à 1.39. Mise à niveau a cassé le peu de code suivant:Mise à niveau de boost 1.38 à 1.39 provoque mon appel à boost :: algorithm :: split ne pas compiler

std::vector<std::wstring> consoleParser::loadStringsFromFile(const std::wstring &fileName) 
{ 
    std::vector<std::wstring> files; 
    std::wstring fileString(loadFileAsString(fileName)); 
    boost::algorithm::split(files, fileString, boost::is_any_of(L"\r\n'\"")); //Error on this line 
    return files; 
} 

Des idées sur ce qui cause l'échec? Mon compilateur émet obligeamment les éléments suivants:

c:\boost\boost\utility\addressof.hpp(30) : error C2220: warning treated as error - no 'object' file generated 
     c:\boost\boost\utility\addressof.hpp(56) : see reference to class template instantiation 'boost::detail::addr_impl_ref<T>' being compiled 
     with 
     [ 
      T=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\function\function_template.hpp(600) : see reference to function template instantiation 'T *boost::addressof<FunctionObj>(T &)' being compiled 
     with 
     [ 
      T=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>>, 
      FunctionObj=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\function\function_template.hpp(491) : see reference to function template instantiation 'bool boost::detail::function::basic_vtable2<R,T0,T1>::assign_to<F>(FunctionObj,boost::detail::function::function_buffer &,boost::detail::function::function_obj_tag)' being compiled 
     with 
     [ 
      R=boost::iterator_range<std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>>, 
      T0=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      T1=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      F=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>>, 
      FunctionObj=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\function\function_template.hpp(906) : see reference to function template instantiation 'bool boost::detail::function::basic_vtable2<R,T0,T1>::assign_to<Functor>(F,boost::detail::function::function_buffer &)' being compiled 
     with 
     [ 
      R=boost::iterator_range<std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>>, 
      T0=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      T1=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      Functor=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>>, 
      F=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\function\function_template.hpp(720) : see reference to function template instantiation 'void boost::function2<R,T0,T1>::assign_to<Functor>(Functor)' being compiled 
     with 
     [ 
      R=boost::iterator_range<std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>>, 
      T0=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      T1=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      Functor=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\algorithm\string\detail\find_iterator.hpp(51) : see reference to function template instantiation 'boost::function2<R,T0,T1>::function2<FinderT>(Functor,int)' being compiled 
     with 
     [ 
      R=boost::iterator_range<std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>>, 
      T0=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      T1=std::_String_iterator<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>, 
      FinderT=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>>, 
      Functor=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\algorithm\string\find_iterator.hpp(261) : see reference to function template instantiation 'boost::algorithm::detail::find_iterator_base<IteratorT>::find_iterator_base<FinderT>(FinderT,int)' being compiled 
     with 
     [ 
      IteratorT=input_iterator_type, 
      FinderT=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\algorithm\string\iter_find.hpp(167) : see reference to function template instantiation 'boost::algorithm::split_iterator<IteratorT>::split_iterator<FinderT>(IteratorT,IteratorT,FinderT)' being compiled 
     with 
     [ 
      IteratorT=input_iterator_type, 
      FinderT=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\boost\boost\algorithm\string\split.hpp(149) : see reference to function template instantiation 'SequenceSequenceT &boost::algorithm::iter_split<SequenceSequenceT,RangeT,boost::algorithm::detail::token_finderF<PredicateT>>(SequenceSequenceT &,RangeT &,FinderT)' being compiled 
     with 
     [ 
      SequenceSequenceT=std::vector<std::wstring>, 
      RangeT=std::wstring, 
      PredicateT=boost::algorithm::detail::is_any_ofF<wchar_t>, 
      FinderT=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 
     c:\documents and settings\user\my documents\visual studio 2008\projects\pevfind\pevfind\consoleparser.cpp(1529) : see reference to function template instantiation 'SequenceSequenceT &boost::algorithm::split<std::vector<_Ty>,std::wstring,boost::algorithm::detail::is_any_ofF<CharT>>(SequenceSequenceT &,RangeT &,PredicateT,boost::algorithm::token_compress_mode_type)' being compiled 
     with 
     [ 
      SequenceSequenceT=std::vector<std::wstring>, 
      _Ty=std::wstring, 
      CharT=wchar_t, 
      RangeT=std::wstring, 
      PredicateT=boost::algorithm::detail::is_any_ofF<wchar_t> 
     ] 
c:\boost\boost\utility\addressof.hpp(30) : warning C4512: 'boost::detail::addr_impl_ref<T>' : assignment operator could not be generated 
     with 
     [ 
      T=boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<wchar_t>> 
     ] 

Répondre

3

Votre compilation a échoué car un nouvel avertissement est émis (boost::detail::addr_impl_ref<T>' : assignment operator could not be generated) et vos paramètres sont définis pour traiter les avertissements comme des erreurs. A en juger par this et this, c'est effectivement un problème avec Boost 1.39.0 et VS2008.

Ce dernier lien fournit un correctif qui résout le problème. Il devrait être corrigé dans Boost 1.40.0. L'alternative serait de désactiver temporairement l'indicateur "traiter les avertissements en tant qu'erreurs".

1

Si je passe au niveau d'alerte 4 et configurer des avertissements de traiter comme des erreurs mes pauses aussi. Essayez de modifier ces paramètres.

0

Je n'aime vraiment pas « traiter les avertissements comme des erreurs » pour ce genre de raison, mais vous pouvez juste faire:

#pragma warning (disable:4512) 

dessus de toute ligne #include pour addressof.hpp.

Questions connexes