It's suggested here to be implemented in a following way:
template<class Ret, class... Args>
struct is_function<Ret(Args...)const> : std::true_type {};
template<class Ret, class... Args>
struct is_function<Ret(Args...)volatile> : std::true_type {};
But is it a valid function syntax? Visual Studio 2013 gives an error:
error C2270: 'abstract declarator' : modifiers not allowed on nonmember functions