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?