Следующий код принимается GCC, и полученный двоичный файл выводит ожидаемые результаты. Но соответствует ли это стандарту и всегда ли будет работать в разных системах без использования разных компиляторов?
#include
using func_t = void(*)(void* data);
void int_func(int* data)
{
std::println("{}", *data);
}
void const_int_func(const int* data)
{
std::println("{}", *data);
}
void int_arry_func(int(&data)[2])
{
for (int elem : data)
std::println("{}", elem);
}
void const_int_arry_func(const int(&data)[2])
{
for (int elem : data)
std::println("{}", elem);
}
int main()
{
func_t func_1 = reinterpret_cast(int_func);
func_t func_2 = reinterpret_cast(const_int_func);
func_t func_3 = reinterpret_cast(int_arry_func);
func_t func_4 = reinterpret_cast(const_int_arry_func);
int val = 5;
int vals[2] = { 1, 2 };
func_1(& val);
func_2(& val);
func_3(vals);
func_4(vals);
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... id-argumen