我正在尝试以下简单的事情来行使ADL的行为
namespace test{
struct S{ public: s():a(10){} int a;};
template<typename T>
void fun(S o){
T a{};
std::cout<<(a+o.a)<<"\n";
}
}
int main(){
test::S A;
fun<int>(A);
}
error1: expected primary-expression before ‘int’
fun<(int)>(A);
error2:'fun’ was not declared in this scope
fun<int>(A);
我不确定第一个错误(有没有什么可以处理C ++烦恼的解析?)和第二个错误,因为我已经传递了S
类型的参数我相信ADL会考虑{ {1}}及其关联的S
,但不确定我收到namespace test
错误的原因。
答案 0 :(得分:-1)
你放置了乐趣&lt;&gt;在test-namespace中。
所以用test :: fun
调用它