Не удается скопировать 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 в данный момент не очень хороша, так что это может быть ошибкой.