Привет.
Хотел написать так, чтобы создавался массив размером == шаблонному параметру и все его элементы инициализировались некоторым значением (в момент создания, а не потом обходом, т.к массив юзер типов, надо через конструктор). Написал:
#include <array>
#include <utility>
#include <iostream>
using namespace std;
template <size_t I>
struct Init_val {
static int f(int val) {return val;}
static constexpr int i = 9;
};
template <size_t num>
struct S {
void f(int val) {
[val]<size_t ...I>(index_sequence<I...>) {
array ar{(Init_val<I>::f(val) , ...)};
array ar2{(Init_val<I>::i , ...)};
// check
for (int a : ar)
cout << a;
cout << endl;
for (int a : ar2)
cout << a;
cout << endl;
}(make_index_sequence<num>{});
}
};
int main() {
S<5> s;
s.f(7);
}
шланг и ГЦЦ компилирует без ошибок, но при запуске ожидалось пять семёрок и пять девяток, но:
$ g++ 2.cpp -std=c++20 && ./a.out
7
9
Надо багрепорт писать?
PS: я там два массива сделал, вообще мне нужен тот что с функцией, но т.к. с функцией конструкция шибко хитрая, то написал вариант с константой - тоже не работает.