¿Hay alguna razón por la que no podamos nombrar una función miembro no estática en un contexto no evaluado?
Al leer[expr.prim.id], uno verá que
Una expresión de identificación que denota un miembro de datos no estático o una función de miembro no estático de una clase solo se puede usar:
si esa expresión id denota un miembro de datos no estático y aparece en un operando no evaluado.El hecho de que la viñeta anterior se aplica solo a los miembros de datos no me queda claro. Intuitivamente, esperaría que lo siguiente esté bien 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!");
Pero eldecltype()
está mal formado incluso antes de que se verifique la aserción estática.
¿Hay alguna ambigüedad que me falta?