Допустим, у меня есть шаблон функции, который внутри кода использует, например, оператор +
, и он копирует элемент, переданный в качестве параметра:
template<class T>
T calcDouble(T&& el){
return el + el;
}
Должен ли я использовать SFINAE для ограничения T
на быть копируемым и иметь определение operator+
, если у меня нет другого варианта этого?
Другими словами, должен ли я использовать SFINAE, чтобы определить, что должен иметь этот тип, если нет намерения сделать "перегрузку" этого шаблона что использует другие вещи для достижения того, что мы хотим? (например, используя *2
и, следовательно, требуйте, чтобы он имел operator-
и был преобразован в int
)