template-Spezialisierung
-
Hi,
ich habe vereinfacht folgenden Code:template<typename T, T Base> struct GreatestPower { template<unsigned long Value = Base, unsigned long Max = sizeof(T) * 8, unsigned long I = Max - 1> struct IncreasePower { static T const X = IncreasePower<Value, Max, 0>::X; }; template<unsigned long Value, unsigned long Max> struct IncreasePower<Value, Max, 0> { static T const X = 0; }; static T const X = IncreasePower<>::X; };Der funktioniert auch (macht was er soll). Aber Problem ist, dass der erste Template Parameter bei IncreasePower, also Value, eigentlich den Typ T und nicht unsigned long haben soll.
Ändere ich das aber (sowohl bei der Definition als auch der Spezialisierung fuer I = 0) kann der g++ offensichtlich die Spezialisierung nicht mehr finden und looped 500 mal bis er die Rekursion wegen Überschreitung des Limits abbricht.Frage: ist das nur ein Bug oder wie kommt dieses Verhalten zustande?
Danke für eure Antworten.