根据标准,在类中声明和定义的友元函数只能由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
外?