Considerate questo codice:In quale unità di compilazione vive una variabile constexpr?
struct foo
{
static constexpr int value = 42;
};
void bar(const int* value) { std::cout << *value; }
int main() { bar(&foo::value); }
Questo compila avvertimenti fini e senza sotto il couple di online compilers ho provato. Dato che non esiste un singolo file .cpp
che definisce il valore constexpr
, il valore del puntatore potrebbe essere diverso se il metodo bar
viene richiamato da diverse unità di compilazione? Oppure lo standard garantisce che il valore finisca assegnato solo una volta su tutte le unità di compilazione (cioè un implicito _declspec(selectany)
)?
Hai appena compilato, o anche collegato il programma? –
Non appena l'utente [utilizza effettivamente] (http://ideone.com/Bi5oEt), è necessario fornire una definizione. –
Questo codice viola la regola a una definizione, ma poiché questo comportamento non è definito, i compilatori non devono emettere alcun avviso. – cpplearner