2015-03-11 4 views
8

Ich habe einen seltsamen Kompilierungsfehler auf gcc-4.9.2, wo der gleichen Code auf anderen Compilern gearbeitet, wie gcc-4.8 oder jede Klirren ich habhaft werden kann. Das Problem ist nicht auf non-type template-arguments verwendet. Also bedenken Sie:gcc-4.9.2: Nicht-Typ Template-Parameter

#include <iostream> 
#include <cstddef> 

int templateParam; 

template <int &D> struct TestTemplate { 
    int value() {} 
}; 

template <> int TestTemplate<templateParam>::value() { 
    return templateParam; 
} 

TestTemplate<templateParam> testVariable; 

int main() { 

    std::cout << testVariable.value() << "\n"; 

    return 0; 
} 

ich folgende Fehlermeldung mit gcc-4.9.2 erhalten:

prog.cpp:10:17: error: prototype for 'int TestTemplate<D>::value() [with int& D = (* & templateParam)]' does not match any in class 'TestTemplate<(* & templateParam)>' 
template <> int TestTemplate<templateParam>::value() { 
       ^
prog.cpp:7:9: error: candidate is: int TestTemplate<D>::value() [with int& D = (* & templateParam)] 
    int value() {} 
     ^

diese beiden ideones machen es klarer:

Ist das ein Compiler Fehler?

Antwort

3

Ist das ein Compiler Fehler?

Ja, ich denke, es war https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63658 und wird in der nächsten Version behoben werden.

+0

hmpf, nicht was ich gehofft habe ;-(Danke trotzdem. Also eine Problemumgehung basierend auf dem Bugreport besteht darin, Zeiger anstelle von Referenzen zu verwenden (ausprobiert) – klsdjfhsalkjfhl

+0

Hinzufügen, ['gcc-4.3.2'] (https://www.gnu.org/software/gcc/releases.html) ist mehr als 6 Jahre alt. –

+0

ja, aber es ist derjenige von ideone zur Verfügung gestellt ... versucht alle verfügbaren Compiler in Jessie ... – klsdjfhsalkjfhl