/*
Write and test a variadic template function sum_values() that accepts an arbitrarily
long list of arguments with numeric values (they can be a mixture of types) and
returns the sum as a long double value.
*/
#include <iostream>
using namespace std;
template<typename T>
long double sum_values(T sum) {
return sum;
}
template<typename T, typename TT, typename... TTT>
long double sum_values(T a, TT b, TTT... args) {
return sum_values(a + b, args...);
}
int main() {
cout << sum_values(5) << " == 5? " << endl;
cout << sum_values(5, 6) << " == 11? " << endl;
cout << sum_values(5, 6, 7) << " == 18? " << endl;
cout << sum_values(5, 6, 7, 8) << " == 26? " << endl;
cout << sum_values(5, 2.3, 2.63, 'a') << " == 106.93? " << endl;
return 0;
}
LyoKV3JpdGUgYW5kIHRlc3QgYSB2YXJpYWRpYyB0ZW1wbGF0ZSBmdW5jdGlvbiBzdW1fdmFsdWVzKCkgdGhhdCBhY2NlcHRzIGFuIGFyYml0cmFyaWx5CmxvbmcgbGlzdCBvZiBhcmd1bWVudHMgd2l0aCBudW1lcmljIHZhbHVlcyAodGhleSBjYW4gYmUgYSBtaXh0dXJlIG9mIHR5cGVzKSBhbmQKcmV0dXJucyB0aGUgc3VtIGFzIGEgbG9uZyBkb3VibGUgdmFsdWUuCiovCgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpsb25nIGRvdWJsZSBzdW1fdmFsdWVzKFQgc3VtKSB7CglyZXR1cm4gc3VtOyAKfQp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUVCwgdHlwZW5hbWUuLi4gVFRUPgpsb25nIGRvdWJsZSBzdW1fdmFsdWVzKFQgYSwgVFQgYiwgVFRULi4uIGFyZ3MpIHsKCXJldHVybiBzdW1fdmFsdWVzKGEgKyBiLCBhcmdzLi4uKTsKfQoKaW50IG1haW4oKSB7Cgljb3V0IDw8IHN1bV92YWx1ZXMoNSkgPDwgIiA9PSA1PyAiIDw8IGVuZGw7Cgljb3V0IDw8IHN1bV92YWx1ZXMoNSwgNikgPDwgIiA9PSAxMT8gIiA8PCBlbmRsOwoJY291dCA8PCBzdW1fdmFsdWVzKDUsIDYsIDcpIDw8ICIgPT0gMTg/ICIgPDwgZW5kbDsKCWNvdXQgPDwgc3VtX3ZhbHVlcyg1LCA2LCA3LCA4KSA8PCAiID09IDI2PyAiIDw8IGVuZGw7Cgljb3V0IDw8IHN1bV92YWx1ZXMoNSwgMi4zLCAyLjYzLCAnYScpIDw8ICIgPT0gMTA2LjkzPyAiIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==