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

标签 c++ templates decltype

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

相关文章:

c++ - 检查对话框/小部件/窗口是否仍然打开以防止重复

c++ - boost::hana::map 作为数据成员

c++ - 如何从另一个实例的类型动态实例化一个新实例? C++

c++ - 获取模板参数的 decltype

c++ - 派生类的成员函数行为能否由其实例化的类决定?

c++ - 如何在 C++ 中可视化/绘制图形?

c++ - 用于 Linux 上 C++ 的带有 GUI 的调试器

c++ - 另一个奇怪的编译器错误 : calling a templated function which gives undefined referenes

templates - 如何将可选的 Facelet 模板内容包装在 div 标签中?

c++ - 为什么 std::begin 使用尾随返回类型语法?