Как инициализировать последовательность неподвижных, не копируемых объектов?

Позволять'скажем, у меня есть тип, который не является ни подвижным, ни копируемым:

struct foo
{
  explicit foo( size_t ){}
  ~foo(){}

  foo( foo const & ) = delete;
  foo( foo && ) = delete;
  foo& operator=( foo const & ) = delete;
  foo& operator=( foo & ) = delete;
};

Теперь, учитывая число, известное во время компиляции (назовите его N), есть ли способ, которым я могу создатьпоследовательность" из них в стеке, каждый из которых инициализируется числами от 0 до N-1? Я был бы доволен массивом в стиле Cfoo[N],std::array< foo, N >или, может быть, дажеstd::tuple какой-то

Что я'Я пытаюсь избежать, пишу:

foo f0( 0 ), f1( 1 ), ... fNminus1( N-1 );

когда мне кажется, что это то, что компилятор должен сделать для меня. Лучший яЯ смог придумать, использует.boost::optional

boost::optional< foo > f[N];

for( size_t i = 0U; i < N; ++i )
  f[i] = boost::in_place( i );

Но это зависит от логики времени выполнения, хотя вся необходимая информация доступна во время компиляции. Плюс ям осталось с чем-то, что ведет себя как массив указателей.

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

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