http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58030
Bug ID: 58030 Summary: Mismatched tags in std::hash friends Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: minor Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: bluescarni at gmail dot com I am testing out clang in conjunction with GCC 4.8.1's libstdc++ in c++11 mode. I routinely get these warnings when compiling with -Wall and -Wextra: --- /home/yardbird/repos/piranha/src/rational.hpp:1753:1: warning: 'hash' defined as a struct template here but previously declared as a class template [-Wmismatched-tags] struct hash<piranha::rational> ^ /usr/lib/gcc/x86_64-redhat-linux/4.8.1/../../../../include/c++/4.8.1/bits/stl_bvector.h:523:31: note: did you mean struct here? template<typename> friend class hash; ^ /usr/lib/gcc/x86_64-redhat-linux/4.8.1/../../../../include/c++/4.8.1/bitset:763:33: note: did you mean struct here? template<typename> friend class hash; ^ /usr/lib/gcc/x86_64-redhat-linux/4.8.1/../../../../include/c++/4.8.1/bits/stl_bvector.h:523:31: note: did you mean struct here? template<typename> friend class hash; ^ --- Indeed, these friendship declarations in bitset and stl_bvector.h use 'class' instead of 'struct' when referring to std::hash. It is my understanding that this behaviour does not constitute a violation of the standard... still it irks my compiler warnings OCD :) Any chance this could be fixed sometimes?