6
부스트 1.53.0을 사용하여 Mac OS X에서 clang (CXX = 'clang ++ -std = C++ 11 -stdlib = libC++')을 사용하고 있습니다.boost :: uuids :: uuid를 std :: unordered_map의 키로 사용 하시겠습니까?
나는 unordered_map도의 키로서 UUID를 사용하기를 원하지만 다음과 같은 오류가 점점 :
/usr/bin/../lib/c++/v1/type_traits:748:38: error: implicit instantiation of undefined template
'std::__1::hash<boost::uuids::uuid>'
: public integral_constant<bool, __is_empty(_Tp)> {};
^
/usr/bin/../lib/c++/v1/unordered_map:327:54: note: in instantiation of template class
'std::__1::is_empty<std::__1::hash<boost::uuids::uuid> >' requested here
template <class _Key, class _Tp, class _Hash, bool = is_empty<_Hash>::value
...
/usr/bin/../lib/c++/v1/unordered_map:327:71: error: no member named 'value' in
'std::__1::is_empty<std::__1::hash<boost::uuids::uuid> >'
template <class _Key, class _Tp, class _Hash, bool = is_empty<_Hash>::value
~~~~~~~~~~~~~~~~~^
... 그것은 무엇
입니다 - 버그 Boost에서 내 C++ lib와 호환되지 않습니까? 아니면 내가 잘못하고있는거야? 해결 방법은 무엇입니까?
+1'std :: hash'의 명시적인 전문화를 제공하는 대신에 타입을 생성하고 ('uuid_hasher'),'uuid_hasher :: operator() (uuid const &)'를 구현할 수 있습니다. 그 타입은'unordered_map'에 대한 세 번째 템플릿 인자가 될 것입니다. – Praetorian
타입에 대한 해시의 전문화의'operator()'가'const'로 표시되어야한다고 생각합니다. const가 아닌 상태로두면 컴파일이 실패합니다. –