【问题标题】:Map indexed by tuples in VC++VC++中元组索引的映射
【发布时间】:2011-03-15 15:49:15
【问题描述】:

考虑以下代码:

#include <tuple>

template <typename Map, typename K>
void mymapfunc(Map& m, const K& key) 
{
    m[key] = 1;
}

void f() 
{
    typedef std::tuple<int,int> Pair;
    std::map<Pair,int> m;
    mymapfunc(m, Pair(1,2));
}

此代码在 VC++ 2010 中失败,但在 gcc 4.5 中编译良好(没有使用 -Wall 和 -pedantic 的警告)。错误在&lt;tuple&gt; 内部的某个地方,很难破译。

如果将std::tuple 更改为std::pair,则一切正常。这是怎么回事?

【问题讨论】:

    标签: visual-c++ c++11 tuples


    【解决方案1】:

    当使用std::tuple 作为关联容器中的键类型时,有a bug in Visual C++ 2010(如std::map)。

    解决方法(在链接的错误报告中提到)是构建一个临时的std::tuple

    m[K(key)] = 1;
    

    【讨论】:

    • 呸!它是大约一年前发现的,但仍未修复。不过,谢谢你的回答。
    【解决方案2】:

    N3242, 20.4.2.7 [tuple.rel] 定义了元组的关系运算符。

    如果你添加#include &lt;map&gt;,这个例子在libc++中也能正常编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2016-06-06
      • 2021-12-28
      • 2012-02-26
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多