Compilerbug oder nicht definiert?
-
Hallo
Ich habe vorher in einem Thread zur Übergabe von Fliesskommazahlen als Template-Argument gepostet und habe daraufhin selbst daran experimentiert. Dann versuchte ich diesen Code zu kompilieren:
template<const float& Value> class Owner { class Mod; }; template<const float& Value> class Owner<Value>::Mod { }; int main() { }Mein Compiler (CodeGear C++ Builder 2009) hat mir dann "Unzulässige Verwendung einer Gleitkommazahl" nachgeworfen während Visual C++ 2008 Express Edition still kompiliert hat. Erzeugt der Code undefiniertes Verhalten oder hat CodeGear C++ Builder 2009 einen Compiler-Bug?
MfG, EOutOfResources
-
Versuch doch mal, das Template zu instanziieren, da wird auch der Visual C++ streiken.
-
Bashar schrieb:
Versuch doch mal, das Template zu instanziieren, da wird auch der Visual C++ streiken.
Oh, ja.
-
EOutOfResources schrieb:
Erzeugt der Code undefiniertes Verhalten oder hat CodeGear C++ Builder 2009 einen Compiler-Bug?
Weder noch, es ist schlichtweg nicht erlaubt.
-
Was ich aber nicht ganz versteh denn:
C++ Standard schrieb:
A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
- ...
- lvalue reference to object or lvalue reference to function,
- ...
Und ohne const gehts

-
Ich sehe soweit kein Problem mit dem Code.
template<const float& Value> class Owner { public: class Mod; }; template<const float& Value> class Owner<Value>::Mod { }; extern const float x = 0; Owner<x>::Mod foo;
-
Dann hab ich wohl mal wieder Müll geschrieben. Bei Templates nie mir glauben.
-
Ich sehe auch kein Problem, und auch Comeau-Online sowie GCC fressen es:
http://ideone.com/KZDKU