This does not compile:
template<>
class foo<int> {
static_assert(false, "bad");
};
Reason: "false" is not a dependent name, so the compiler is allowed to check the static_assert when the template is being declared.(Of course since this is a full specialization, there are no dependent names.)
See C++14 Standard §14.6.2 (Dependent Names) or http://en.cppreference.com/w/cpp/language/dependent_name (not sure how accurate that page is, though).
P.S: It might compile with Microsoft's Visual Studio, but only because that compiler doesn't implement two-phase name lookup, effectively turning every name into a dependent name.