私はC++のテンプレートについて質問があります。次のコードはsegfaultsです。segfault in C++のテンプレート
template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
ただし、&を削除しても問題はありません。
template<typename T1, typename T2>
inline T1 const max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
さらに、T1とT2の代わりにTを使用しても問題ありません。
template<typename T>
inline T const& max(T const &a, T const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4, 5) << std::endl;
}
私はここで間違っていますか?
使用しているバージョン番号など、どのコンパイラが記述されているかをご記入ください。それがGCCなら、 '-Wall'でコンパイルしましたか?無視している警告があり、未定義の動作が発生している可能性があります。 –
コンパイラは、max()呼び出しが一時的な参照を返すことを通知する必要があります。 – tristan
最初の2つのコードスニペットは同じですか? – asimes