私はC++標準のODRに関連する条項を読んで読み直しましたが、この質問はまだ私に開かれています。この規格では、インライン関数の定義は、それが使用されるすべての変換単位に表示される必要があり、定義は、ほぼ1ページに記載されている意味で同一である必要があります。トークンシーケンスは同じでなければならないということです。ローカル識別子名が含まれていますか?
言い換えれば、次のプログラムはODRに違反していますか?(Visual Studio 2008で自分でテストしようとすると、エラーと警告が0になりました。しかし、例を2つの完全に異なる定義に変更しても、エラーと警告が0になるため、これは何も証明されないと思います。 MSVCの言い訳として、ODRの違反に対して正式に診断を行う必要はないことに注意してください。
//main.cpp
inline int f(int);
int main(){
f(3);
}
int f(int x){
int z = x;
return z*z;
}
//other.cpp
inline int f(int xx){
int zz = xx;
return zz*zz;
}