Nel seguito ...odr-uso dell'argomento constexpr inoltrato?
struct C {};
constexpr C c;
void g(C);
template<typename T>
void f(T&& t) {
g(std::forward<T>(t));
}
int main() {
f(c);
}
Is c
ODR-utilizzato? Perché perché no?
Nel seguito ...odr-uso dell'argomento constexpr inoltrato?
struct C {};
constexpr C c;
void g(C);
template<typename T>
void f(T&& t) {
g(std::forward<T>(t));
}
int main() {
f(c);
}
Is c
ODR-utilizzato? Perché perché no?
Passando attraverso gli stessi movimenti come in Richard's answer, troviamo che la seconda condizione per non essere è violato ODR-utilizzato, e quindi c
è ODR-utilizzato. In dettaglio, la condizione sia:
[Una variabile
x
è ODR utilizzata da un'espressioneex
menox
è un oggetto e]ex
è un elemento dell'insieme di potenziali risultati di un'espressionee
, dove la conversione da lvalue a rvalue viene applicata ae
oppuree
è un'espressione di valore scartato.
Nel nostro caso x
dal standard è il vostro c
, e ex
è l'ID-espressione c
. Le uniche espressioni di cui ex
è un potenziale risultato è l'espressione id ex
. Non è né un'espressione di valore scartato, né è applicata la conversione da lvalue a valore (poiché si lega a un riferimento).
Quindi qual è la risposta effettiva alla domanda a cui ci si collega? Ci sono due risposte (+12 e +1) per "sì è odr-usato" e uno (+4) per "no non lo è". – Barry
@Barry: Ecco perché mi sono collegato alla risposta, non alla domanda :-) –