enable_if funktioniert nicht in Visual Studio, wenn eine constexpr-Funktion als Argument verwendet wird

8

Ich wrestle gerade mit Visual Studio 2017 (Kompilieren mit /std:c++latest , wenn das irgendeine Hilfe ist).

Der fragliche Code wählt einfach eine Struct-Spezialisierung aus, die auf dem Ergebnis einer templated constexpr -Funktion basiert. GCC und Clang haben keine Probleme, es zu kompilieren.

Hier ist mein MCVE:

%Vor%

choose() ist in meiner Codebasis eigentlich ein bisschen komplexer, aber die static_assert kompiliert immer noch, und prüft gut.

Ich nahm an, dass, wenn static_assert kompiliert, es keinen Grund gibt, dass enable_if nicht in der Lage ist, seine Magie zu machen. Liege ich falsch? Ich denke "vielleicht" T ist nicht technisch ein abhängiger Typ von enable_if ... Aber wenn das der Fall wäre, würde ich erwarten, dass GCC und Klatschen mein Handgelenk schlagen.

Ich kann das umgehen, indem ich das Ergebnis von choose() in einem std::integral_constant einpacke, etwa so:

%Vor%

Aber ich würde wirklich lieber nicht durch diesen Reifen springen müssen.

Kann die Template-Auflösung das so lösen, wie ich es erwarte? Ich bin besorgt, dass der Code tatsächlich falsch ist, und GCC und Clang sind nur nachsichtig zu mir.

    
Frank 10.09.2017, 18:25
quelle

0 Antworten