Вы слишком усложнили вопрос из-за несоответствующей детализации статического элемента.Фактически, вопрос может быть легко воспроизведен как:
void foo(float* );
void k() {
foo((float[4]){1, 2, 3, 4});
}
То, что у вас здесь есть, это «составной литерал», определенный для C99.Стандарт не доступен в C ++, но некоторые компиляторы имеют расширения, которые поддерживают это.Из самого вопроса кажется, что MSVC также поддерживает это расширение - оно упоминает об этом в сообщении - но не разрешает код.Вероятно, есть способ явно включить его в MSVC, но я не эксперт в этом.
Я действительно не вижу причин для написания несоответствующего кода в этом случае, поэтому я бы выступил против этого.
Отвечая на вопрос после редактирования, на самом деле существует несколько способов, как можно добиться однострочного вызова.Можно заставить функцию принимать std::initializer_list<float>
для переменного числа аргументов, std::array<float, 16>
для фиксированного числа аргументов или gsl::span
.