c++ - Initialization of std::array with std::initializer_list in constructor's initialization list -


this question has answer here:

consider following piece of code:

struct foo {   std::vector<int> v;   foo(std::initializer_list<int> l) : v{l} {} }; 

the code above compiles fine , initializes v expected. consider following piece of code:

struct bar {   std::array<int, 3> a;   bar(std::initializer_list<int> l) : a{l} {} }; 

the above piece of code gives compile error.

error: no viable conversion 'std::initializer_list' 'int'

searching web found "proper" way initialize member std::array std::list_initializer use reinterpret_cast in following manner:

bar(std::initializer_list<int> l) : a(reinterpret_cast<std::array<int, 3> const&>(*(l.begin()))) {} 

q:

why can initialize member std::vector std::initializer_list in initialization list of constructor can't member std::array?

is work-around showed above reinterpret_cast proper way initialize member std::array std::initializer_list?

std::array designed (in boost library) support braces initialization syntax c++03. way in c++03 pod (plain old data) type, 1 no constructors. initializer lists introduced in c++11, along std::array, std::array not changed boost version use initializer lists. so, it's historical.

by way, note reinterpret_cast dangerous here because initializer list may contain fewer items array.


Comments

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -