#include <iostream>
#include <vector>
#include <type_traits>
template <class Vector, class Scalar>
typename std::enable_if<std::is_floating_point<Scalar>::value, Vector>::type
operator*(const Scalar &a, const Vector &b)
{
return Vector { a*b[0], a*b[1], a*b[2] };
}
int main()
{
const std::vector<double> v1({1,2,3});
const double s1(2);
const auto result(s1*v1);
std::cout << result[0] << ", " << result[1] << ", " << result[2] << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8Y2xhc3MgVmVjdG9yLCBjbGFzcyBTY2FsYXI+CnR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8U2NhbGFyPjo6dmFsdWUsIFZlY3Rvcj46OnR5cGUKb3BlcmF0b3IqKGNvbnN0IFNjYWxhciAmYSwgY29uc3QgVmVjdG9yICZiKQp7CiAgICByZXR1cm4gVmVjdG9yIHsgYSpiWzBdLCBhKmJbMV0sIGEqYlsyXSB9Owp9CgppbnQgbWFpbigpCnsKICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGRvdWJsZT4gdjEoezEsMiwzfSk7CiAgICBjb25zdCBkb3VibGUgczEoMik7CiAgICBjb25zdCBhdXRvIHJlc3VsdChzMSp2MSk7CiAgICBzdGQ6OmNvdXQgPDwgcmVzdWx0WzBdIDw8ICIsICIgPDwgcmVzdWx0WzFdIDw8ICIsICIgPDwgcmVzdWx0WzJdIDw8IHN0ZDo6ZW5kbDsKfQ==