2015-11-06 154 views
1

是否有可能兩個比較屬性樹?在ptree.hpp中有==和!=的操作符重載,但使用它們會給我一個編譯器錯誤。比較助推屬性樹

ptree a; 
    ptree b; 

    auto match = (a == b); 

結果:

2>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(2798): error C4996: 'std::_Equal1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
2>   c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(2783) : see declaration of 'std::_Equal1' 
2>   c:\boost\1_57_0-msvc-12.0-32\boost\multi_index\sequenced_index.hpp(953) : see reference to function template instantiation 'bool std::equal<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<Super>>,boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<Super>>>(_InIt1,_InIt1,_InIt2)' being compiled 
2>   with 
2>   [ 
2>    Super=boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>> 
2> ,   _InIt1=boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>>>> 
2> ,   _InIt2=boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::sequenced_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>>>>> 
2>   ] 
2>   c:\boost\1_57_0-msvc-12.0-32\boost\multi_index_container.hpp(1263) : see reference to function template instantiation 'bool boost::multi_index::detail::operator ==<SuperMeta,boost::mpl::vector0<boost::mpl::na>,SuperMeta,boost::mpl::vector0<boost::mpl::na>>(const boost::multi_index::detail::sequenced_index<SuperMeta,boost::mpl::vector0<boost::mpl::na>> &,const boost::multi_index::detail::sequenced_index<SuperMeta,boost::mpl::vector0<boost::mpl::na>> &)' being compiled 
2>   with 
2>   [ 
2>    SuperMeta=boost::multi_index::detail::nth_layer<1,std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<std::string>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>>>> 
2>   ] 
2>   c:\boost\1_57_0-msvc-12.0-32\boost\property_tree\detail\ptree_implementation.hpp(417) : see reference to function template instantiation 'bool boost::multi_index::operator ==<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>,std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>>(const boost::multi_index::multi_index_container<Value,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>> &,const boost::multi_index::multi_index_container<Value,boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>::subs::by_name,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,boost::multi_index::member<std::pair<const Key,boost::property_tree::basic_ptree<Key,std::string,std::less<_Kty>>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,pointer-to-member(0x0)>,std::less<_Kty>>,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>,std::allocator<Value>> &)' being compiled 
2>   with 
2>   [ 
2>    Key=std::string 
2> ,   _Kty=std::string 
2> ,   Value=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string,std::less<std::string>>> 
2>   ] 
2>   c:\boost\1_57_0-msvc-12.0-32\boost\property_tree\detail\ptree_implementation.hpp(414) : while compiling class template member function 'bool boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>::operator ==(const boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>> &) const' 
2>   with 
2>   [ 
2>    _Kty=std::string 
2>   ] 
2>   b.cpp(63) : see reference to function template instantiation 'bool boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>::operator ==(const boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>> &) const' being compiled 
2>   with 
2>   [ 
2>    _Kty=std::string 
2>   ] 
2>   b.cpp(57) : see reference to class template instantiation 'boost::property_tree::basic_ptree<std::string,std::string,std::less<_Kty>>' being compiled 
2>   with 
2>   [ 
2>    _Kty=std::string 
2>   ] 

如果這些運營商是不夠有另一種方式,以確定是否ptree中的內容是一樣的嗎?

回答

0

當然,你可以實現你自己的,但上面的應該工作:

Live On Coliru

#include <boost/property_tree/ptree.hpp> 

using boost::property_tree::ptree; 

int main() { 
    ptree a; 
    ptree b; 

    return (a==b)? 1 : 2; 
} 

返回1

與GCC或鐺的,在升壓1.59 (測試舊版本...)

UPDATE

您是否試過定義_SCL_SECURE_NO_WARNINGS

error C4996: 'std::_Equal1': Function call with parameters that may be unsafe - 
this call relies on the caller to check that the passed values are correct. To 
disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how 
+0

參見https://svn.boost.org/trac/boost/wiki/Guidelines/WarningsGuidelines – sehe

+0

也http://www.boost.org/doc/libs/1_48_0/libs/config/見DOC/HTML/boost_config/guidelines_for_boost_authors.html#boost_config.guidelines_for_boost_authors.warnings – sehe