Can funzioni virtuali come X::f()
nel codice seguenteLe funzioni virtuali possono essere constexpr?
struct X
{
constexpr virtual int f() const
{
return 0;
}
};
essere constexpr
?
Can funzioni virtuali come X::f()
nel codice seguenteLe funzioni virtuali possono essere constexpr?
struct X
{
constexpr virtual int f() const
{
return 0;
}
};
essere constexpr
?
No. Da [dcl.constexpr]/3 (7.1.5, "The constexpr
specificatore"):
La definizione di una funzione
constexpr
devono soddisfare i seguenti requisiti:- it non deve essere virtuale
È strano, per 'gcc versione 4.9.2 20141101 (Red Hat 4.9.2-1) (GCC)' [funziona] (http://pastebin.com/gBRT31VG) – zaratustra
Solo perché un compilatore accetta qualcosa non lo fa t significa che è permesso. –
Clang ++ non accetta il codice nel collegamento. –
Pensaci un minuto. Distruggerebbe completamente lo scopo 'constexpr'. –
Tale funzione ipotetica potrebbe essere utilizzata come espressione costante solo se il tipo completo dell'istanza chiamante è noto come 'X'. Ciò richiederebbe in sostanza la lingua per specificare "regole di deviazione". –
@ πάνταῥεῖ In D è possibile eseguire la valutazione della funzione del tempo di compilazione con funzioni virtuali. Quindi non è impensabile. –