Не удается скопировать std :: vector <std :: function <void () >>, используя одинаковую инициализацию. Это правильно?

Следующий код не компилируется в GCC 4.7.2 или Clang 3.2:

#include 
#include 

int main()
{
   std::vector a;
   std::vector b{a};
}

Проблема в том, что компилятор попытается создать b, используя initializer_list, когда он явно должен просто вызывать конструктор копирования. Однако это, кажется, желаемое поведение, потому что стандарт говорит, что конструкторы initializer_list должны иметь приоритет.

Этот код будет хорошо работать для других std :: vector, но для std :: function компилятор может 'не знаю, нужен ли вам конструктор initializer_list или другой.

Это неКажется, что есть способ обойти это, и если это так, то вы никогда не сможете использовать равномерную инициализацию в шаблонном коде. Что было бы гигантским позором.

Visual Studio (2012 CTP ноября) с другой стороны, нене жалуюсь на это. Но поддержка initializer_list в данный момент не очень хороша, так что это может быть ошибкой.

Ответы на вопрос(2)

Ваш ответ на вопрос