I am writing as new answer because it doesn't fit to comment. For addition to @Jarod42.
It seems you assumed that 
template<typename U = T, typename std::enable_if<std::is_same<U, BLA>::value, void>::type> 
substitutes to 
template<typename U = T, typename = void> 
but it doesn't. It substitutes to 
template<typename U = T, void>. 
So, you should declare it as 
template<typename U = T, typename = typename std::enable_if<std::is_same<U, BLA>::value, void>::type>.
Because  the typename you used is for specifying the type is dependant, not for the template parameter declaration. But either won't work as you expected anyway. One silently removes the ill-formed, other one results in multiple declaration of the same function.
After your comment, i try to explain more detailed.
template<typename U = T, typename std::enable_if<std::is_same<U, BLA>::value, void>::type>
void someFunction()
{
    std::cout << "someFunction()\n";
}
If T == BLA, U becomes BLA and it makes std::is_same< U , BLA>::value true. So the result looks like this
template<typename U = BLA, void>
If T == NotBlaType, U becomes NotBlaType and it makes std::is_same<U,BLA>::value false. The result is substition failure, std::enable_if<false,void> has no type.
But in both case, the function is not declared. Because void cannot be allowed as non-type template parameter.
But if we change void to int, then it is allowed. That's why @Jarod42 suggests int.
template<void> is not legal.
But template<int = 2> is legal.
After making the declaration is valid, you should toggle declarations of functions conditionally (because both functions have same signature so causes to multiple declaration). That's why both functions in the @Jarod42's answer have std::enable_if which evalutes negate of each other.