Почему компилятор может вывести T с этим кодом:C++ параметр шаблона вычет не может
#include <vector>
template<typename T>
void foo(T& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
Но терпит неудачу с этим кодом:
#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;
}
Я хочу использовать вторую конструкцию, чтобы выбрать между двумя функциями шаблона , основанный на существовании метода пройденного класса.
Может быть специализация 'std :: enable_if', которая содержит 'using type = std :: vector '. Как компилятор должен знать, когда он имеет только тип параметра? –