Вопрос, на который я недавно пытался ответить, казался ошибкой в поддержке c ++ 11 vs2012.
В частности, не удалось скомпилировать std :: map с неконструктивно-копируемым value_type, несмотря на то, что для вставки в карту используется только std :: move. Либо выбрана неправильная перегрузка вставки, либо компилятор не рассматривает альтернативу.
По сути, я не хочу знать, если следующий код:
#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.
Visual Studio
выходы (увидеть это в прямом эфире):
1
1
Что явно не так, и оба gcc
а также clang
дать ожидаемые результаты. Эта ошибка и исходная проблема, которую вы видите, могут быть связаны с этими двумя принятыми отчетами об ошибках. Неправильные результаты из is_constructible на самом деле может быть не связано с оригинальный баг:
Других решений пока нет …