Selection Sort implementation using modern C++
InputItr doesn't appropriately describe the iterator requirement of your selection sort, which multi-passes the range.  Consider naming the type after forward iterator.
Allow for custom overloads of swap by calling swap in an unqualified context.

    using std::swap;
    swap(*min, *first);


which is just std::iter_swap

    std::iter_swap(min, first);

You don't need to conditionally check if min is smaller than first.  Just swap.

  for (; first != last; ++first) {
    auto min = std::min_element(first, last);
    std::iter_swap(min, first);
  } 

Your print function is just a reimplementation of std::copy.
Make sure you include everything (missing &lt;string&gt;).
Assert liberally. See the CPPCoreGuidelines.