Consider this example from cppreference:
struct S { static const int x = 1; }; void f() { &S::x; } // discarded-value expression does not odr-use S::x >
It is indeed odr-used. Your analysis is correct (and I fixed that example a while ago).