en	= Initializer Lists Initializer lists can be used to construct or assign a <<ref_value>>:

en	Simple initializer lists produce an <<ref_array>>:

en	Initializer lists can be nested. Here we construct an array as an element of an array:

en	When a two element initializer list is nested within an enclosing initializer list, it is unclear whether it represents an <<ref_array>> or an <<ref_object>>:

en	In such cases, if every element consists of a string followed by a single value, then the enclosing initializer list is interpreted as an <<ref_object>>. Otherwise, it is interpreted as an <<ref_array>>.

en	To resolve the ambiguity manually, use an explicit constructor:

en	Initializer lists can be used to unambiguously construct or assign an <<ref_object>> or <<ref_array>>:

en	Similarly, an initializer list for an <<ref_object>> is always interpreted as an <<ref_object>>. In such cases, the initializer list must be a list of key-value pairs. For example, the following code will not compile because `1` is not convertible to a string:

en	The requirement for an initializer list to be interpreted as an <<ref_object>> or <<ref_array>> when initializing such an entity only applies to the outermost initializer list; subsequent nested elements will follow the usual ambiguity resolution rules.

en	Elements that are rvalues will be moved upon initialization:

en	In all cases, the <<ref_storage_ptr>> owned by an <<ref_object>>, <<ref_array>>, or <<ref_value>> constructed from an initializer list will be propagated to each element, recursively.