Por que S :: x não é usado por odr?

Considere este exemplo decppreference:

struct S { static const int x = 1; };
void f() { &S::x; } // discarded-value expression does not odr-use S::x

Eu concordo que&S::x é umexpressão de valor descartado, uma vez que a norma diz (9.2, parágrafo 1 [stmt.expr] den4700)

Instruções de expressão têm o formato

expression-statement:
    expression_opt ;

A expressão é uma expressão de valor descartado (Cláusula 8) ...

No entanto, isso é suficiente paraS::x não serodr-used? 6.2, o parágrafo 3 [basic.def.odr] declara

Uma variávelx cujo nome aparece como uma expressão potencialmente avaliadaex éodr-used porex a menos que

...E sex é um objetoex é um elemento do conjunto de resultados potenciais de uma expressãoe, ondea conversão lvalue em rvalue (7.1) é aplicada aeoue é uma expressão de valor descartado (Cláusula 8).

O problema é que a expressão de valor descartado&S::x não tem resultados em potencial (o que significa queS::x não é um resultado potencial de&S::x), como você pode ver na seção 6.2, parágrafo 2 [basic.def.odr]:

... O conjunto de resultados potenciais de uma expressãoe é definido da seguinte maneira:

E see é uma expressão id (8.1.4), o conjunto contém apenase.E see é uma operação de subscrição (8.2.1) com um operando de matriz, o conjunto contém os resultados potenciais desse operando....Caso contrário, o aparelho está vazio.

Então, como você pode explicar issoS::x o odr não é usado?

questionAnswers(3)

yourAnswerToTheQuestion