Не могли бы вы сказать мне, почему следующий код не компилируется (с "не найдена соответствующая перегруженная функция" в MSV C):
template<typename V>
struct LinearModel { // has basis vectors
template<typename T = V>
auto consolidation() const -> decltype(std::declval<T>() += (std::declval<T>() *= double())) {
V linearCombination;
// linearly combine basis vectors using += and *=
return linearCombination;
}
};
int main(){
LinearModel<double> lm;
auto c = lm.consolidation(); // the line that produces the error
return 0;
}
Мое намерение - определить LinearModel<T>::consolidation()
только для T
, которые имеют T& operator *=(double)
и T& operator +=(T)
.