簡體   English   中英

在類中定義的友元函數模板是否可用於查找? clang ++和g ++不同意

[英]Is a friend function template defined in the class available for lookup? clang++ and g++ disagree

這是代碼:

struct foo {
  template<typename T = void>
  friend foo f() { return {}; }
};

int main() {
  auto x = f(); // clang++ can't find it, g++ can.
}

clang ++ 3.4給出:

fni2.cpp:8:12: error: use of undeclared identifier 'f'
  auto x = f(); // clang++ can't find it, g++ can.
           ^
1 error generated.

g ++ 4.9.0編譯它,但我不認為它應該有。 是一個相關的問題,但沒有明確的答案。 第15.4.2 / 2,4節討論了這一點,但他們都沒有說任何暗示在類中定義的友元函數模板應該與類中定義的非模板友元函數具有不同的可見性。

這只是我的學術興趣,雖然它確實來自其他可能有實際用例的人提出的問題。

它看起來像是一個g ++錯誤。

是的,這是一個錯誤。 我很驚訝它找到了這個功能。 顯然GCC完全沒有隱藏功能模板。

這個C ++ 03示例也編譯,所以它可能是一個回歸:

struct foo {
  template<typename T >
  friend void f( T ) { }

};

int main() {
  f( 3 ); // clang++ can't find it, g++ can.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM