Erweitern eines Lambda für jeden Parameter eines Parameterpakets: Clang vs. GCC

8

Dieser Code funktioniert in Clang 3.5:

%Vor%

In GCC 4.9 bekomme ich stattdessen den folgenden Fehler:

%Vor%

Also, welcher Compiler hat einen Bug, Clang oder GCC? Das Clang Verhalten macht zumindest für mich am meisten Sinn.

    
Emil Eriksson 01.02.2015, 18:56
quelle

1 Antwort

2

gcc ist hier kaputt. Es gibt Regeln für nicht expandierte Parameterpakete im Standard, aber das obige Parameterpaket ist erweitert.

Es wird nach dem Ende der innersten Anweisung, die es in ist, erweitert, aber der Standard erfordert nicht, dass die Parameterpakete bis zum Ende jeder Anweisung erweitert werden.

Die Tatsache, dass gcc es falsch verstanden hat, ist irgendwie verständlich; naiv, man könnte denken, dass ein Parameterpack nur in einer Anweisung enthalten sein kann und der Fehler, am Ende der Anweisung zu expandieren, fatal ist. Mit lambdas können Sie Anweisungen in Anweisungen verschachteln.

Eine allgemeine Problemumgehung kann darin bestehen, ein Lambda zu übergeben und einen "tag" -Typ an es zu übergeben.

%Vor%     
Yakk 26.09.2016, 19:42
quelle