【发布时间】:2016-10-21 04:41:45
【问题描述】:
按照标准,类中声明和定义的友元函数只能通过ADL找到。所以,我认为下面的代码应该可以编译。
template<int M>
struct test{
template<int N = 0>
friend void foo(test){}
};
int main(){
test<2> t;
foo(t);// compile
foo<1>(t);// error
}
但是,gcc 给出以下错误:
main.cpp: In function 'int main()':
main.cpp:10:5: error: 'foo' was not declared in this scope
foo<1>(t);
^~~
那么,我有三个问题。
-
template<int N> foo应该按标准找吗? - 为什么找到
foo而找不到foo<1>? - 除了在外面定义
foo之外,有没有变通的办法?
【问题讨论】:
-
它不适用于 clang 3.8 但它适用于 GCC 5.3.1
-
@JohanBoule 不适用于 coliru.stacked-crooked.com 上的 g++
-
你到底想在代码中做什么?
-
@PurityLake 它什么都不做。但它的作用与我的问题无关。
标签: c++ argument-dependent-lookup friend-function function-templates