An overloaded random number function template using modern C++
The constructor of uniform_int_distribution has default arguments:
template&lt;typename T&gt;
explicit uniform_int_distribution(T a = 0, 
                                  T b = std::numeric_limits&lt;T&gt;::max());

(I don't know why a defaults to 0 rather than to the minimum T, but there you go).
You can reduce your duplication by using the same default arguments, and passing them through to this constructor:
template &lt;typename T&gt;
T Randolfi(T range_start = 0,
           T range_end = std::numeric_limits&lt;T&gt;::max())
{
    std::uniform_int_distribution&lt;T&gt; dist(range_start, range_end);
    return dist(rng);
}

Or, we can use perfect forwarding to create the distribution with the same arguments as passed in:
template &lt;typename T, typename... Args&gt;
T Randolfi(Args&amp;&amp;... args)
{
    std::uniform_int_distribution&lt;T&gt; dist(std::forward&lt;Args&gt;(args)...);
    return dist(rng);
}

We'll need to do this if we want to support a variety of distributions, so it's probably the way to go.

Don't recreate a random generator every call.  You could make it static, which will reduce that to once per instantiation, but it's better to keep it outside of the function, so you only create and seed it once per process.
In the test program, you should exercise more than one type T, and test with implicit and explicit range.  Also, avoid using namespace std;, and prefer tests which don't require a GUI environment (so they can be more easily run on build servers).

Modified code
#include &lt;limits&gt;
#include &lt;random&gt;
#include &lt;utility&gt;

static auto rng = []{
    std::mt19937 rng;
    rng.seed(std::random_device()());
    return rng;
}();

template &lt;typename T,
          template&lt;typename&gt; typename Distribution
                                      = std::uniform_int_distribution,
          typename... Args&gt;
T Randolfi(Args&amp;&amp;... args)
{
    Distribution&lt;T&gt; dist(std::forward&lt;Args&gt;(args)...);
    return dist(rng);
}

#include &lt;iostream&gt;

int main()
{
    std::clog &lt;&lt; Randolfi&lt;int&gt;(-100, +100) &lt;&lt; '\n'
              &lt;&lt; Randolfi&lt;char&gt;('a', 'z') &lt;&lt; '\n'
              &lt;&lt; Randolfi&lt;double, std::normal_distribution&gt;(100, 15) &lt;&lt; '\n'
              &lt;&lt; Randolfi&lt;std::size_t&gt;() &lt;&lt; std::endl;
}