我不明白为什么我的编译器不接受下面的代码。
编译器命令是:
为什么不允许在std::unordered_map中使用typename M::const_iterator作为键?
#include <unordered_set>
#include <unordered_map>
template<class T>
using M = std::unordered_set<T>;
template<class T>
using D = M<T>;
template<class T>
using DM = std::unordered_map < typename M<T>::const_iterator // Problem
, typename D<T>::const_iterator >; // Problem
int main(int argc, char ** argv)
{
D<int> d;
M<int> m;
DM<int> dm; // Problem
}
编译器命令是:
clang++ -std=c++14 test.cpp -o test
编译器错误信息摘录如下:
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../../include/c++/5.3.1/bits/hashtable_policy.h:85:11: error:
implicit instantiation of undefined template
'std::hash<std::__detail::_Node_const_iterator<int, true, false> >'
noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
为什么不允许在std::unordered_map中使用typename M::const_iterator作为键?
typename
不是必需的,因为M
和D
都不是模板参数。 - Zereges