su código es mal formados con respecto a C++ 03. Puede no construir alguna vez un tipo de función calificada const (o volátil). Cada vez que lo haces, tu programa se vuelve mal formado.
Esta regla has been changed para C++ 1x, para hacer que el compilador ignore el const
/volatile
. Los compiladores de C++ generalmente ya implementarán esta regla incluso en el modo C++ 03. Por lo tanto, los siguientes dos definirán la misma función dos veces, y dará como resultado un error de compilación.
typedef void Ft();
void f(Ft const*) { }
void f(Ft *) { } // another definition!
Aquí está la prueba de mi reclamo. C++ 03, 8.3.5/1
Un CV-calificador-seq sólo será parte del tipo de función para una función miembro no estático, el tipo de función a la que un puntero a miembro se refiere, o el tipo de función de nivel superior de una función typedef declaration. El efecto de un cv-qualifier-seq en un declarador de función no es lo mismo que agregar cv-qualification sobre el tipo de función, es decir, no crea un tipo de función cv-qualified. De hecho, si en algún momento en la determinación de un tipo se forma un tipo de función calificada como cv, el programa está mal formado.
aquí es que el texto para C++ 1x, 8.3.5/7
n2914:
A fi er-seq cv-cuali sólo será parte del tipo de función para una función miembro no estático, el tipo de función a lo que se refiere un puntero al miembro, o el tipo de función de nivel superior de una declaración de función typedef. El efecto de un cv-quali fi er-seq en un declarador de funciones no es lo mismo que agregar cv-quali fi cation en la parte superior del tipo de función. En este último caso, los calificadores cv son ignorados.
Lo anterior dice que lo que sigue es válido, sin embargo, y crea el tipo de función para una función que puede declarar una función de miembro constante.
typedef void Ft() const;
struct X { Ft cMemFn; };
void X::cMemFn() const { }
Oye, está el experto de Standard del que estaba hablando. : P – GManNickG
Hehe, soy te n00b con textos estándar. Pero me alegro de que te guste el análisis :) –
He leído C++ 98 estándar. Es por eso que no pude encontrarlo. –