1

我最近试图回答的一个问题似乎是 vs2012 的 c++11 支持中的错误。

具体来说,尽管只有 std::move 用于插入映射,但它无法使用不可复制构造的 value_type 编译 std::map。要么选择了错误的插入重载,要么编译器没有考虑替代方案。

基本上,我不知道是否以下代码:

#include <iostream>
#include <memory>
#include <utility>
#include <type_traits>

class Foo {
};

using namespace std;

int main() {
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >& >::value << '\n';
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >&& >::value << '\n';
}

给出输出 01。

4

1 回答 1

1

Visual Studio输出(现场观看):

1
1

这显然是错误的,两者都gcc给出clang了预期的结果。此错误和您看到的原始问题可能与这两个已接受的错误报告有关。is_constructible的错误结果实际上可能与原始错误无关:

于 2014-01-12T04:07:34.593 回答