Existe uma razão pela qual não podemos nomear uma função membro não estática em um contexto não avaliado?

Ao ler[expr.prim.id], verá que

Uma expressão id que denota um membro de dados não estático ou função de membro não estático de uma classe pode ser usada apenas:

se essa expressão de id denota um membro de dados não estático e aparece em um operando não avaliado.

O fato de o marcador acima se aplicar apenas aos membros dos dados não está claro para mim. Intuitivamente, espero que o seguinte seja bem formado:

#include <type_traits>

using func = int();

class bar {
  func foo; // This is valid, and not the subject of the question
};

static_assert(std::is_same<decltype(bar::foo), func>::value, "No Symmetry!");

Mas odecltype() está mal formado antes mesmo de a asserção estática ser verificada.

Falta alguma ambiguidade?

questionAnswers(3)

yourAnswerToTheQuestion