32bit/64bit/...?
-
Sebastian Pizer schrieb:
Ja, darf ich.

Im Ernst: Der Unterschied ligt in der Kompilierbarkeit.Nicht wirklich:
template<bool> struct StaticAssert; template<> struct StaticAssert<true> { }; // ... StaticAssert<sizeof(int) == 4> assert;Finito, hier hast du deinen gewünschten Kompilerfehler.
Sebastian Pizer schrieb:
Ist
void*ein fundamentaler Typ?
Du meinst X = Ganzzahltyp.Nein und Nein.
void*ist ein Compound Type. Das sind alle Zeiger.
X darf auch einfloatoderdoublesein, auch wenn es nicht all zu viel Sinn macht.Sebastian Pizer schrieb:
Kann gut sein. In einem solchen Fall gäbe es zu dem Problem auch keine Lösung. Da kann ich aber nichts für, wenn die Voraussetzungen für eine existierende Lösung nicht gegeben sind.
Dagegen sage ich ja auch nichts. Ich sage nur, dass du an der Lösung von Badestrand kritisierst, dass sich diese nicht an den Standard hält, aber deine tut es genauso wenig.
Grüssli
-
Dravere schrieb:
Dagegen sage ich ja auch nichts. Ich sage nur, dass du an der Lösung von Badestrand kritisierst, dass sich diese nicht an den Standard hält, aber deine tut es genauso wenig.
GrüssliSo, wie ich das sehe, macht der Typlisten-Ansatz zwei Annahmen weniger, welche nicht vom C++ Standard garantiert werden -- nämlich sizeof(int)==4 und sizeof(long long)==8.
Ich habe nie behauptet, dass "long long" Teil des C++ Standards ist. Die Nutzung von "long long" in diesem Fall ist ein Trade-Off. Entweder es gibt einen Kompilierfehler, weil "long long" nicht bekannt ist, oder es gibt einem Kompilierfehler, weil sizeof(T)<sizeof(void*) für alle anderen Ganzhaltypen T gilt und deswegen das Template-Metaprogramm fehlschlegt. Was ist das kleinere Übel? Ich weiss es nicht... Das wär mir aber auch ehrlichgesagt solange egal, bis das Programm woanders kompiliert werden soll. Dann kann man immernoch die Typlisten mit #ifdefs anpassen...
Gruß,
SP