bugprone-use-after-move issues a false positive diagnostic on this example: namespace std { template <typename a> void move(a &&); } template <class> void foo() { int c = 0; c; ; std::move(c); } template void foo<int>(); The reason for this is that the NullStmt is used in both the uninstantiated and the instantiated version of the function template. The NullStmt therefore has two parents; the current version of the sequencing code in ExprSequence cannot handle this, leading it to conclude incorrectly that the use and the move are unsequenced.