この標準変換に関する既存の質問を読んだことがあります。 しかし、満足のいく回答は見つかりませんでした。テンプレート型減算が暗黙の配列からポインタへの変換を実行します
このコードは、T*
のオーバーロードがT&&
よりも大きいことを示しています。私が理解したところから、別のオーバーロードが完全に一致しない限り、転送参照のオーバーロードはすべてをバインドする必要があります。
次のコードでは、tab
はchar const(&)[4]
です。
誰かがここで配列からポインタへの変換が実行される理由を説明できますか? その変換を回避する方法がある場合、私はすべての耳です!
(coliru link)
#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;
}
関連/重複を::
これを解決するために、我々はSFINAE使用して、たとえば、コンパイラへf(T*)
はあまり魅力的にする必要がhttp://stackoverflow.com/q/28182838は、http://// 21972652。 –