Список инициализаторов переменных

Можно ли создатьinitializer_list переменных, таких как аргументы функции, например (см. функциюtest)?

Код ниже работает, и ни Clang, ни GCC ни на что не жалуются, но я просто хотел бы убедиться, что все в порядке.

#include <iostream>
#include <initializer_list>

template <class T>
struct array
{
    T *ptr;
    size_t len;

    array() { clear(); }
    array( T *p, size_t l ) { assign(p,l); }

    inline void clear() { ptr=nullptr; len=0; }
    inline void assign( T *p, size_t l ) { ptr=p; len=l; }

    inline T& operator[] ( size_t i ) const { return ptr[i]; }
};

template <class T>
inline array<const T> wrap( const std::initializer_list<T>& lst )
    { return array<const T>( lst.begin(), lst.size() ); }

void test( int a, int b, int c )
{
    auto ar = wrap({a,b,c});
    std::cout<< ar[2] << std::endl;
}

int main()
{
    auto a = wrap({1,2,3});
    std::cout<< a[2] << std::endl;

    test(1,2,3);
}

Побочный вопрос; если я попытаюсь вернуть мой упакованный массив вtestСписок инициализаторов{a,b,c} выйдет из области видимости, а возвращаемый массив будет недействительным - это правильно?

Ответы на вопрос(1)

Ваш ответ на вопрос