Ich habe unten einen Beispielcode.
#include
template
class XYZ
{
private:
T & ref;
public:
XYZ(T & arg):ref(arg)
{
}
};
class temp
{
int x;
public:
temp():x(34)
{
}
};
template
void fun(T & arg)
{
}
int main()
{
XYZ<temp> abc(temp());
fun(temp()); //Dies ist ein Kompilierfehler in gcc, während der obige Code perfekt gültig ist.
}
In dem obigen Code, obwohl der XYZ-Konstruktor das Argument als nicht-const-Referenz annimmt, kompiliert er gut, während die fun-Funktion nicht kompiliert. Ist dies spezifisch für den g++-Compiler oder hat der C++-Standard etwas dazu zu sagen?
Bearbeiten:
g++ -v gibt dies zurück.
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)