Bo
int tab[20];
cout << sizeof(tab); // sizeof daje rozmiar zmiennej typu int[20], wiec rozmiar jest 20*sizeof(int)
cout << std::size(tab); // 20 bo zmienna typu int[20] ma z definicji 20 elementow
ale
int *tab = /*cokolwiek*/;
cout << sizeof(tab); // sizeof(int*) == 8 na systemach 64-bitowych
cout << std::size(tab); // nie skompiluje się bo nie można poznać rozmiaru tablicy na jaką wskazuje wskaźnik
Jeśli rozmiar jest zawsze stały, zrób stałą przechowującą rozmiar.
Jeśli rozmiar nie jest stały, to przekazuj go jako argument razem z tablicą.
Staraj się nie używać sizeof().