Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialiser list passed as function parameter for array

How do I make this work:

void foo(uint8_t a[]) { ... }

foo({0x01, 0x02, 0x03});

It gives me an error:

error: cannot convert '<brace-enclosed initializer list>' to 'uint8_t* {aka unsigned char*}' for argument '1'
                                                     ^
like image 533
Timmmm Avatar asked Jul 21 '15 11:07

Timmmm


1 Answers

This worked for me, I had to change the function signature but it's actually better in my case as it statically checks the array length:

void foo(std::array<uint8_t, 3> a) { /* use a.data() instead of a */ }

foo({0x01, 0x02, 0x03}); // OK

foo({0x01, 0x02}); // Works, at least on GCC 4.9.1. The third value is set to zero.

foo({0x01, 0x02, 0x03, 0x04}); // Compilation error.
like image 98
Timmmm Avatar answered Oct 10 '22 23:10

Timmmm