Warum Compiler T mit diesem Code ableiten kann:C++ Template-Parameter Abzug nicht
#include <vector>
template<typename T>
void foo(T& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
Aber nicht mit diesem Code:
#include <vector>
#include <type_traits>
template<typename T>
void foo(typename std::enable_if<true, T>::type& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
I zweites Konstrukt verwendet werden soll, zwischen zwei Template-Funktionen wählen basierend auf der Existenz der bestandenen Klassenmethode.
Es könnte eine Spezialisierung 'std :: enable_if' sein, die einen 'mit type = std :: vector enthält '. Wie kann der Compiler wissen, wann er nur den Parametertyp hat? –