std :: make_unique, anonymer Namespace und ODR

8

Bitte beachten Sie den folgenden Testfall (reduziert von der LLVM-Quelle):

%Vor%

und

%Vor%

Verstößt dies gegen die eine Definitionsregel?

gcc-6 denkt momentan so:

%Vor%     
octoploid 20.05.2015, 05:58
quelle

2 Antworten

6

Das war ein GCC-Bug (der nur einige Tage im Entwicklungsbaum war). Das Problem wurde durch eine andere Korrektur verursacht, die GCC veranlasste, implizite typedefs nicht-anonym zu betrachten und somit die äußeren Strukturen typisiert zu bekommen (nicht korrekt). Der Testfall ist jetzt behoben, ich wäre an weiteren Warnungen interessiert, die möglicherweise falsch erscheinen.

    
Jan Hubička 21.05.2015, 04:18
quelle
-2

Sie haben zwei verschiedene Definitionen einer Klasse. Das Kompilieren der beiden führt zu einem direkten Konflikt, wenn diese beiden nicht in separaten Namespaces enden. Ich nehme an, das könnte richtig sein.

Sie sollten danach suchen, ob sich die beiden Implementierungsfunktionen gegenseitig ausschließen. Es kann zwei verschiedene Quelldateien mit separaten Definitionen geben, aber es gibt Fälle, in denen zwei Definitionen sinnvoll sein könnten (dh ich habe eine Threading-API für Windows und Linux und ich muss zwei verschiedene Definitionen basierend auf meinen Kompilierungseinstellungen haben).

    
VermillionAzure 20.05.2015 06:34
quelle

Tags und Links