Before C++20, MSVC was supporting not mentioning the template argument of the base class when initializing a class inheriting a templated base class.
So the following code compiled correctly:
template <class T> class Base { }; template <class T> class Derived : public Base<T> { public: Derived() : Base() {} }; void test() { Derived<int> d; }
See https://godbolt.org/z/Pxxe7nccx for a conformance view.
This patch adds support for such construct when in MSVC compatibility mode.
We have to make sure our MS compatibility logic fires *before* we try to correct typos. It's currently a big issue that we don't. You can try adjusting your test case by adding a similarly named class like Baze and see if you still get the desired behavior.
See this old issue from 2014:
https://github.com/llvm/llvm-project/issues/20623