Ich habe eine offizielle Antwort auf this question, die decltype
sollte nicht Triggerfunktion Kompilierung. Tatsächlich ist decltype
für eine Funktion, die deklariert, aber nicht definiert ist, legal.Sollte die Adresse einer Templatisierten Funktion die Kompilation auslösen?
Nächste Frage, sollte unter der Adresse einer Funktion die Erstellung einer Funktion auslösen? Nehmen this example:
template <typename T>
void foo(T&& x) { x.func(); }
int main()
{
auto bar = &foo<int>;
}
All Compiler ich getestet habe nicht mit einem Fehler wie:
Antrag auf Mitglied
func
inx
, dieint
von Nicht-Klasse-Typ ist
Aber wenn ich nur foo
definiere und es nicht deklariere, kompiliert der Code gut. Kann mir jemand eine offizielle Quelle geben, ob die Adresse einer Funktion die Kompilierung erfordert?
Nach http://en.cppreference.com/w/cpp/language/definition%23One_Definition_Rule „ein Objekt ODR-Adresse verwendet, wenn seine genommen wird“, und „Wenn ein Objekt oder eine Funktion ist odr- verwendet, muss seine Definition irgendwo im Programm existieren, eine Verletzung davon ist ein Link-Zeit-Fehler ". Ich habe nicht die relevanten Standard-Anführungszeichen, um dies zu einer Antwort zu machen – KABoissonneault
@KABoissonneault Ich bin damit einverstanden. Wenn Sie http://en.cppreference.com für beide Zitate zitieren könnte, würde ich das offiziell genug betrachten. –
@KABoissonneault Es sieht aus wie [was Sie zitiert] (http://en.cppreference.com/mwiki/index.php?title=cpp/language/definition&diff=prev&oldid=73909) geschrieben wurde von [Cubbi] (http ://Paketüberfluss.com/users/273767/cubbi) Ich wünschte, es gäbe einen Weg, um ihn zu begrüßen und mehr Informationen darüber zu bekommen. –