问题描述
例如:
template<auto& N>
struct test_nontype {
int call() {
return f(*this); // error: 'f' was not declared in this scope
}
};
template<typename T>
struct test_type {
int call() {
return f(*this); // ok,f is found in ns via ADL
}
};
namespace ns {
static struct type_in_ns {} value;
int f(test_nontype<value>) {
return 3;
}
int f(test_type<type_in_ns&>) {
return -3;
}
}
int main() {
int x = test_type<ns::type_in_ns&>{}.call();
return x + test_nontype<ns::value>{}.call();
}
使用类型可以正常工作,但是由于找不到int ns::f(test_nontype<ns::value>)
,因此最后一行无法编译。
如果有其他选择,我宁愿不添加参数template<auto& N,typename = decltype(N)> struct test_nontype {
,因为添加了模板参数,这只会使接口更加混乱(我必须添加注释来说明它适用于ADL,但是IDE仍然建议添加类型名称,这还会增加更多的噪音来编译错误)
还有其他解决方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)