我最近试图回答的一个问题似乎是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。
答案 0 :(得分:1)
Visual Studio
输出( see it live ):
1
1
这显然是错误的,gcc
和clang
都会给出预期的结果。您遇到的此错误和原始问题可能与这两个已接受的错误报告有关。 is_constructible 的错误结果实际上可能与original bug无关: