This makes the tests less flaky and also makes a few other refactorings like using traits instead of .compile.fail.cpp tests.
This makes the tests less flaky and also makes a few other refactorings like using traits instead of .compile.fail.cpp tests.