What compiler is right and for what reason?
Microsoft's compilers differ from clang and gcc in the way they handle template expansion (cf "two phase lookup").
The gcc implementation is closer to the standard.
If you want all models to have the characteristics of Model<0>
then I think I would defer the common code to a different base class, which could itself be a template of course.
e.g.
template class ModelImpl
{
void modelly_thing() {};
};
template class Model
: public ModelImpl, 0>
{
};