Compiletime RNG
-
Hallo. Jason Turner hatte in einem seiner Videos (https://www.youtube.com/watch?v=rpn_5Mrrxf8) einen Random Number Generator vorgestellt, der zur Compilezeit ausgeführt wird.
Leider kompiliert sein Code nur mit dem GCC. Clang und MSVC melden Fehler, weil etwas nicht zu einer constexpr ausgewertet werden kann. Da ich bei constexpr noch absolut im Dunkeln tappe, wäre ich über Tipps sehr erfreut.Ich packe hier der Einfachheit halber mal den Link zum Compiler Explorer rein: https://godbolt.org/g/8kRjf3
-
-std=c++17
-
manni66 schrieb:
-std=c++17
Leider ändert das nichts. Ich erhalte weiterhin: C2131 Ausdruck wurde nicht zu einer Konstanten ausgewertet.
-
Mit clang geht das in deinem godbolt Beispiel.
-
OK, dann ist der MSVC scheinbar erstmal das schwarze Schaf -.-' In meiner Visual Studio Solution und im Link will er es auch unter c++17 nicht machen. XCode kompiliert es jetzt zwar einwandfrei, führt es aber nicht aus Premium.
-
MSVC hat scheint's nur Probleme mit dem for Loop über __TIME__.
Mit ner Hilfsvariable geht's:constexpr auto seed () { std::uint64_t shifted = 0; char time[] = __TIME__; for (const auto c : time) // MSVC OK ;) { shifted <<= 8; shifted |= c; } return shifted; }
-
So simpel. Ein Träumchen, vielen Dank!