我已经阅读了有关此标准转换的现有问题.但是,我找不到令人满意的答案.
我有这段代码,表明T*选择了重载T&&.根据我的理解,转发引用重载应绑定所有内容,除非另一个重载是完美匹配.
在下面的代码中,tab是一个char const(&)[4].
有人可以向我解释为什么在这里执行数组到指针的转换吗?如果有办法解决转换问题,我全都耳朵!
(coliru 链接)
#include <utility>
template <typename T>
void f(T&& lol)
{
}
template <typename T>
void f(T* pof)
{
static_assert(sizeof(T) && false, "");
}
template <typename T>
struct S;
int main(int argc, char *argv[])
{
decltype("lol") tab = "lol";
S<decltype(tab)> s;
f("lol");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数组被推导为Ptr类型.
见http://en.cppreference.com/w/cpp/language/template_argument_deduction
在扣除开始之前,对P和A进行以下调整:
1)如果P不是参考类型,
a)如果A是数组类型,则A由从数组到指针转换获得的指针类型替换;
b)否则,如果A是函数类型,则A由从函数到指针转换获得的指针类型替换;
c)否则,如果A是cv限定类型,则忽略顶级cv限定符以进行推导
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |