C++ edit distance / string similarity function based on the Jaro-Winkler algorithm
Here are a few things that I immediately see in this code that have room for improvement:

template &lt;typename T = float&gt;


Assuming you only want floating point values passed as template parameters (Since you do floating point arithmetic later on), you could add:

static_assert(std::is_floating_point&lt;T&gt;::value, 
              "jaro can only be used with floating point types");




const unsigned sl = source.length();
const unsigned tl = target.length();


While the above may work for your code, the type for the length of the std::string_view isn't always guaranteed to be a plain unsigned int. Consider using std::size_t as the variable type, or std::string_view::size_type.



auto source_matches = new bool[sl] {0};
auto target_matches = new bool[tl] {0};



The use of auto is confusing here. It is hard to tell at first glance that you are meaning to use a dynamic array. auto doesn't shorten the type much either, so you may want to remove it.
Raw dynamic arrays are a large source of error. Consider using std::vector instead. This will also allow you to remove the deletes later on in your code.




for (unsigned i = 0; i &lt; sl; ++i)


You could use std::size_t here. Don't make assumptions about unsigned types.



delete[] source_matches;
delete[] target_matches;


Using a std::vector would allow you to remove this.



(unsigned)std::min(source.length(), target.length())


If you have to use a cast, prefer using static_cast, as it makes your intent clearer.