In order to avoid explicitly specifying the floating point type when using the LinearRange template, we do as the STL does with make_pair(): we create a convenience function called make_linear_range() which returns a LinearRange object where its type has been deduced from the arguments.
Here is how we implement the make_linear_range() function:
template <typename T>auto make_linear_range(T start, T stop, size_t n) { return LinearRange<T>{ start, stop, n };}
Without the make_linear_range() function, we need to explicitly specify the contained value type to create a range:
auto r = LinearRange<double>{0.0, 1.0, 4};// r evaluates to {0.0, 0.33, 0.66, 1.0}
Using the make_range_function we the <double> ...