A lot of our code building with clang-cl.exe using Clang 11 was failing with the following 2 type of errors:
- explicit specialization of 'foo' after instantiation
- no matching function for call to 'bar'
Note that we also use -fdelayed-template-parsing in our builds.
I tried pretty hard to get a small repro for these failures, but couldn't. So there is some subtle edge case in the -fpch-instantiate-templates feature introduced by this change:
https://reviews.llvm.org/D69585
When I tried turning this off using -fno-pch-instantiate-templates, builds would silently fail with the same error without any indication that -fno-pch-instantiate-templates was being ignored by the compiler. Then I realized this "no" option wasn't actually working when I ran Clang under a debugger.
This should probably be hasFlag(fpch_ins..., fno_pch_inst..., true) so that -fno-pch-inst -fpch-inst... works.