Есть вот такой код где функция 
word_count принимает ссылку на поток.
Как правильно написать данную функцию чтобы  можно было делать вызов как
word_count(ifs), так и вызов 
word_count(std::ifstream("./main.cpp")) ?
И как изменить код чтобы можно было бы сделать и вызов 
word_count(ifs) при условии что ifs может быть const?
Вроде как для универсальной ссылки нужно использовать &&, но вместе с этим как я понял нужно использовать и std::forward, но не понимаю куда его вписать корректно если в принципе нужно его прописывать.
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
template <typename T>
std::size_t word_count(T& is)
{
	return std::distance(std::istream_iterator<std::string>(is), {});
}
int main()
{
	std::ifstream ifs("./main.cpp");
	std::cout << "There are " << word_count(ifs) << " words" << std::endl;
	return 0;
}