Visual Studio 2012是否正确执行此操作?的std ::移动

时间:2014-01-12 02:29:27

标签: c++ visual-studio-2012 c++11 compiler-bug

我最近试图回答的一个问题似乎是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。

1 个答案:

答案 0 :(得分:1)

Visual Studio输出( see it live ):

1
1

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