在模板函数中使用 decltype 时出现编译器错误。例子是不言自明的。帮忙?
template<class T>
void foo(T&& m)
{
auto t = (decltype(m)::value_type::second_type::value_type*)3; // compiler error
}
int main()
{
unordered_map<int, map<float, double>> m;
foo(m);
auto t = (decltype(m)::value_type::second_type::value_type*)3; // ok, t is a std::pair<const float, double>*
}
最佳答案
如果在函数中使用m
,则需要删除引用(并添加typename
):
示例:
typename std::remove_reference_t<decltype(m)>::value_type::second_type::value_type* t;
或者简单地使用T
:
typename T::value_type::second_type::value_type* t;
关于模板内 C++ value_type::second_type 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69148789/