In a job interview, I was asked to write a metafunction that determined whether a type was a pointer. This is what I presented:
template struc
In your case
template struct assert; template <> struct assert {};
would have solved the problem:
assert::value>(); // valid assert::value>(); // valid assert::value>(); // compilation error: // use of incomplete class