2014-01-12 4 views
1

Вопрос, который я недавно пытался ответить, представлял собой ошибку в поддержке C++ 11 vs2012.Выполняет ли Visual Studio 2012 это правильно? std :: move

В частности, ему не удалось скомпилировать std :: map с помощью неконвертируемого значения value_type, несмотря на то, что для вставки в карту используется только std :: move. Выбрана либо неправильная перегрузка вставки, либо компилятор не рассматривает альтернативу.

В принципе, я wan't знать, если следующий код:

#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

Я также имел проблемы с Visual Studio 2013 с использованием зЬй :: двигаться – Tips48

+0

@ Tips48 так ли был ваш вопрос! маленький мир – user3125280

ответ

1

Visual Studio выходов (see it live):

1 
1 

который является явно неправильные, и оба значения gcc и clang дают ожидаемые результаты. Эта ошибка и исходная проблема, которую вы видите, могут быть связаны с этими двумя принятыми сообщениями об ошибках. Неверные результаты is_constructible может быть на самом деле никакого отношения к original bug:

+0

извините, немного уточнение пожалуйста: оригинальная ошибка, как в другом ответе? – user3125280

+0

похоже, что компилятор считает, что он является конструктивным, и только обнаруживает, что он был неправильным, когда он создает конструктор копирования. Я добавлю еще несколько случаев, если это нормально EDIT, я вижу, что вы на шаг впереди, спасибо. все же, что вы подразумеваете под «оригинальной проблемой»? – user3125280

+0

@ user3125280 Я имел в виду [это] (http://stackoverflow.com/questions/21056872/c-stdunique-ptr-wont-compile-in-map) как оригинальную проблему. –

Смежные вопросы