No need for separate specialization:
template<typename T>
struct bar
{
static_assert( !std::is_same<T, char>::value,
"No, you can't instantiate bar with char" );
};
EDIT: In response to your edit, again a similar thing:
template<template<typename> class T, typename U>
struct quux<T<U>>
{
static_assert( !std::is_same<U, bool>::value ,
"Please don't use quux with a template with a bool parameter" );
};