Следующий код не компилируется в GCC 4.7.2 или Clang 3.2:
#include <vector>
#include <functional>
int main()
{
std::vector<std::function<void()>> a;
std::vector<std::function<void()>> b{a};
}
Проблема в том, что компилятор попытается создать b с помощью initializer_list, хотя очевидно, что он должен просто вызвать конструктор копирования. Однако это кажется желаемым поведением, потому что стандарт говорит, что конструкторы initializer_list должны иметь приоритет.
Этот код отлично работает для других std::vector, но для std::function компилятор не может знать, нужен ли вам конструктор initializer_list или другой.
Не похоже, что есть способ обойти это, и если это так, то вы никогда не сможете использовать универсальную инициализацию в шаблонном коде. Что было бы огромным позором.
С другой стороны, Visual Studio (ноябрьская CTP-версия 2012 г.) не жалуется на это. Но поддержка initializer_list на данный момент не очень хороша, так что это может быть ошибкой.