4

次のプログラムを検討してください: (ここでライブデモを参照してくださいhttp://ideone.com/7VHdoU )

#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
    fun(3);
}
void fun(long int a)
{
    std::cout<<a<<'\n';
}

コンパイラは次のエラーを出しています:

error: call of overloaded 'fun(int)' is ambiguous
  fun(3);
       ^

しかし、なぜ、どのようにあいまいなのかわかりませんか? ここでは、何らかの自動型昇格が含まれますか? fun を (3L) で呼び出すと、コンパイルが成功することがわかっています。

4

1 に答える 1

2

charおそらく 3 は他の型 ( 、 ...など) として解釈されるunsigned可能性があるため、呼び出したい関数をコンパイラーが認識するのはあいまいな場合があります。値 3 が であることを示す必要がありますlong int

#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
    fun((long int)3);
}
void fun(long int a)
{
    std::cout<<a<<'\n';
}
于 2015-10-21T04:38:49.863 に答える