Le C++ refuse toute ambiguïté, aussi pour qu'une surcharge soit possible
il faut tout d'abord qu'il y ait un moyen de distinguer
entre les arguments des fonctions surchargées (le type
retourné ne permettra pas de distinguer des fonctions surchargées). Par
exemple, T
et T&
acceptent les mêmes
valeurs et on ne pourra donc pas avoir :
void f(int i){ //... } void f(int& i){ //... }On ne peut non plus distinguer entre
T
,
const T
et volatile T
.
Par contre, on peut distinguer entre T&
,
const T&
et volatile T&
T *
et const T *
et volatile T *
). Rappelons aussi que le
typedef
ne définit pas un autre type, mais un
synonyme, que pointeur et tableaux sont identiques.