EDIT:. Прежде чем мы начнем, этот вопрос не касается правильного использования std::initializer_list; это то, что должно быть принято, когда требуется удобный синтаксис. Спасибо, что остался на тему.
С++ 11 вводит std::initializer_list для определения функций, принимающих аргументы braced-init-list.
struct bar {
    bar( char const * );
    bar( int );
} dog( 42 );
fn foo( std::initializer_list< bar > args );
foo( { "blah", 3, dog } );
Синтаксис хорош, но под капотом это неприятно из-за различных проблем:
-  
Они не могут быть значимо перемещены. Вышеупомянутая функция должна скопировать
dogиз списка; это не может быть преобразовано в операцию перемещения или отклонено. Типы Move-only не могут использоваться вообще. (Ну,const_castдействительно будет допустимым обходным путем. Если есть статья об этом, я бы хотел его увидеть.) -  
Нет семантики
constexpr. (Это ожидается в С++ 1y. Это небольшая проблема.) -  
constне распространяется, как и везде;initializer_listникогда неconst, но его содержимое всегда есть. (Поскольку он не владеет своим содержимым, он не может предоставить доступ для записи к копии, хотя копирование в любом месте редко будет безопасным.) -  
Объект
initializer_listне имеет своего хранилища (yikes); его связь с полностью раздельным голой матрицей (yikes), обеспечивающая хранение, является неопределенным (yikes) как отношение ссылки на связанный временной (четверные yikes). 
Я верю, что все это будет исправлено в свое время, но на данный момент существует лучшая практика для получения преимуществ без жесткого кодирования до initializer_list? Существует ли какая-либо литература или анализ в отношении непосредственной зависимости от нее?
Очевидным решением является передача по значению стандартного контейнера, такого как std::vector. Как только объекты будут скопированы в него из initializer_list, он будет создан для перемещения по значению, а затем вы можете переместить содержимое. Улучшение будет заключаться в том, чтобы предложить хранилище в стеке. Хорошая библиотека может предложить большинство преимуществ initializer_list, array и vector, даже не используя первый.
Любые ресурсы?