The direct problem is here:
std::list<typename ContainerType::value_type>>::value>>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In your example, ContainerTypeis a reference type ( std::vector<int>&), and you cannot access typedefs from a reference type. First you need to remove the link.
But we can make it easier by simply ignoring the part KeyType:
template <class X> struct is_list : std::false_type { };
template <class T, class A> struct is_list<std::list<T,A>> : std::true_type { };
template <class Container, class Key,
std::enable_if_t<!is_list<std::decay_t<Container>>::value>* = nullptr>
void func(ContainerType&&, Key&& ) { ... }