2013-03-28 122 views
2

我遇到了一個奇怪的問題,可能是也可能不是bug。函數名稱的全局名稱空間說明符用typedef正確解析?

下面的代碼片段無法在叮噹4.2編譯,但在gcc上執行,因爲它解析「baz :: test」作爲返回類型。

typedef int baz; 

namespace foo { class bar; } 
baz test(foo::bar &); 

namespace foo { 
    class bar { 
    private: 
     int f; 
     friend baz ::test(bar &); 
    }; 
} 

friend int ::test(bar &)編譯一樣,friend baz (::test)(bar &)

我已經瀏覽了一下這個標準,試圖看看clang的行爲是否正確,而沒有深入瞭解。這是叮噹聲中的錯誤嗎?

回答

1

標準不說,

friend baz ::test(bar &); 

friend baz::test(bar &); 

是等價的。

但是,我認爲他們應該都可以編譯。

相關問題