C++ value_type::second_type 模板内的编译器错误

C++ value_type::second_type compiler error inside template

在模板函数中使用 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;