這是一個非常短的代碼片段,它不會用g ++ 4.7.1進行編譯(它不會使用gcc 4.6.3編譯)。爲什麼沒有這個模板函數編譯?
#include <iostream>
template<typename T>
struct Foo
{
template<typename U>
friend std::ostream& operator<<(Foo&, U&);
};
template<typename T, typename U>
std::ostream& operator<<(Foo<T> foo, U& u)
{
std::cout << u;
return std::cout;
}
int main()
{
Foo<int> f;
f << "bar";
return 0;
}
而這正是GCC 4.7.1輸出(4.6.3說幾乎同樣的事情)。
/tmp/ccNWJW6X.o:在功能
main': main.cpp:(.text+0x15): undefined reference to
的std :: basic_ostream> & 操作者< <(美孚&,字符常量(&)[4])」 collect2: LD返回1退出狀態
任何人都可以解釋爲什麼?
編輯
我也試圖與鐺3.1,和它說完全一樣的東西。