= int
template <class U>
std::enable_if_t<std::is_same_v<T, std::vector<U>>, T>
add(U val) {
...
}
// Assumeing T = int, U = int
template <class U>
std::enable_if_t<!std::is_same_v<T, std::vector<U>>, T>
add(U val) {
...
}
};
int main() {
assert(addable<int>{2}.add(3) == 5);
std::vector<int> v1 {1, 2, 3};
std::vector<int> v2 {11, 12, 13};
assert(addable<std::vector<int>>{v1}.add(10) == v2);
}
А разве сигнатуры ф-й не будут следующими ? (смотреть ассерты)
// int add(int val);
// std::vector<int> add(int val);
Нельзя же перегружать ф-ю только по return type. Значит я ошибаюсь, но где ?
Это не перегрузка по return type, у шаблона функции сигнатура содержит и return type
Собственно свиная отсекает одну из двух, так что компилятор никогда не стоит перед выбором из версий
Обсуждают сегодня