Mam pytanie dotyczące szablonów C++. Następujące kody są uszkodzone.segfault w szablonach 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;
}
jednak usunąć & i robi słusznie.
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;
}
Co więcej, po prostu użyj T zamiast T1 i T2 i działa dobrze.
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;
}
Co ja tu robię źle?
Proszę wymienić kompilator, w tym numer wersji, którego używasz. Jeśli jest to GCC, czy skompilowałeś go z '-Wall'? Może być ostrzeżenie, które ignorujesz, które powoduje niezdefiniowane zachowanie. –
Kompilator powinien informować, że wywołanie max() zwraca odwołanie do tymczasowego. – tristan
Pierwsze dwa fragmenty kodu są identyczne? – asimes