Uso g ++ 4.4.3 y tienen los siguientes alias para que nunca te olvides de encender las advertencias:
$ alias g++
alias g++='g++ -ansi -pedantic -Wall -W -Wconversion -Wshadow -Wcast-qual -Wwrite-strings'
Si compilado con lo anterior, habría algunas advertencias. Los siguientes pasos muestran cómo las diferentes opciones muestran diferentes advertencias.
Compilación sin opción de advertencia no se muestra ninguna advertencia
$ \g++ sizeofarray.cpp
Encendido -Wall
$ \g++ -Wall sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: unused variable ‘q’
Encendido -Wextra
$ \g++ -Wall -Wextra sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: unused variable ‘q’
sizeofarray.cpp: At global scope:
sizeofarray.cpp: In instantiation of ‘int size(T (&)[N]) [with T = char, int N = 27]’:
sizeofarray.cpp:12: instantiated from here
sizeofarray.cpp:4: warning: unused parameter ‘Array’
Finalmente encender -pedantic
para coger el verdadero problema
$ \g++ -Wall -Wextra -pedantic sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: ISO C++ forbids variable length array ‘q’
sizeofarray.cpp:12: warning: unused variable ‘q’
sizeofarray.cpp: At global scope:
sizeofarray.cpp: In instantiation of ‘int size(T (&)[N]) [with T = char, int N = 27]’:
sizeofarray.cpp:12: instantiated from here
sizeofarray.cpp:4: warning: unused parameter ‘Array’
'q [sizeof (p)]' está bien, probablemente quiso decir 'q [tamaño (p)]'. Tenga en cuenta que este último será válido en C++ 0x (si declara 'size' como' constexpr'). – avakar
El problema es con el 'tamaño' en lugar de sizeof. Ver mi publicación. – Chubsdad
Pruebe las opciones del compilador -pedantic o -std = C++ 98 ;-) – sellibitze