2016-01-16 16 views
7

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?

+2

Pensaci un minuto. Distruggerebbe completamente lo scopo 'constexpr'. –

+0

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". –

+1

@ πάνταῥεῖ In D è possibile eseguire la valutazione della funzione del tempo di compilazione con funzioni virtuali. Quindi non è impensabile. –

risposta

24

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

+0

È strano, per 'gcc versione 4.9.2 20141101 (Red Hat 4.9.2-1) (GCC)' [funziona] (http://pastebin.com/gBRT31VG) – zaratustra

+5

Solo perché un compilatore accetta qualcosa non lo fa t significa che è permesso. –

+1

Clang ++ non accetta il codice nel collegamento. –