Der Variadic-Vorlagencode wird auf GCC 4.6 kompiliert, nicht jedoch auf clang oder GCC 4.7

9

Ich habe diesen Code (vereinfacht von einer komplexeren Version):

%Vor%

Wenn ich es in GCC 4.6.3 mit g++ -std=c++0x filename.cpp kompiliere, kompiliert es sich aber, wenn ich clam 3.0 verwende, indem ich clang++ -std=c++0x filename.cpp verwende, wird der folgende Fehler ausgegeben:

%Vor%

In GCC 4.7.2 gibt es auch einen Fehler:

%Vor%

Jetzt ist die Frage: Warum versagt es oder was mache ich falsch?

    
eyelash 02.02.2013, 17:40
quelle

1 Antwort

2

Als Teil der Auflösung Ссылка wurde entschieden, dass a Das Parameterpaket, das nicht ableitbar ist, nimmt nicht an der Ableitung teil, wodurch die explizit angegebenen Argumente in der Parameterliste beibehalten werden, aber die Übereinstimmung nachfolgender Argumente mit nachfolgenden Funktionsparametern nicht gestört wird. Diese hinzugefügten Regeln gelten jedoch nicht notwendigerweise für den Abzug beim Vergleich von Typen (dies ist ein Unteralgorithmus der Ableitung des Parametersatzes gegen die Argumente für einen Funktionsaufruf).

Ich würde argumentieren, dass die Entschließung auch für Ihre Situation gelten sollte, und betrachten sie einfach als einen Bereich, in dem die Spezifikation nicht ganz klar ist. Vielleicht möchten Sie einen Fehlerbericht an die entsprechenden Compiler senden und sie möchten vielleicht einen Problembericht an WG21 senden, um ihn zu bitten, dies zu klären (obwohl ich nicht sicher bin, dass ich so weit gehen würde zu sagen, dass dies ein normatives Spezifikations - Problem ist Standard sagt anderswo, dass nicht ableitbare Kontexte nicht an Abzügen teilnehmen.

Beachten Sie, dass A1 ein Parameter der umschließenden Klassenvorlage ist (und daher bei der Instanziierung der Klasse zu normalen Parametern wird). Sie können sie weglassen und behalten die gleiche Bedeutung, wenn es um die Schätzung von Vorlagenargumentationen geht

%Vor%     
Johannes Schaub - litb 03.02.2013, 13:35
quelle

Tags und Links