Когда мы должны использовать SFINAE - PullRequest
1 голос
/ 25 апреля 2020

Допустим, у меня есть шаблон функции, который внутри кода использует, например, оператор +, и он копирует элемент, переданный в качестве параметра:

template<class T>
T calcDouble(T&& el){
   return el + el;
}

Должен ли я использовать SFINAE для ограничения T на быть копируемым и иметь определение operator+, если у меня нет другого варианта этого?
Другими словами, должен ли я использовать SFINAE, чтобы определить, что должен иметь этот тип, если нет намерения сделать "перегрузку" этого шаблона что использует другие вещи для достижения того, что мы хотим? (например, используя *2 и, следовательно, требуйте, чтобы он имел operator- и был преобразован в int)

...