函数调用禁止参数隐式转换

函数调用禁止参数隐式转换

​ 方法:通过模板删除未定义的函数,从而禁止函数发生隐式转换。

template <typename T>
void f(T) = delete;

void f(int) {}

struct X{ operator int() const { return 0;} };

int main()
{
f(1); //OK
f(1u); //ERROR
f(1lu); //ERROR
f(1.); //ERROR
f('c'); //ERROR
f(X{}); //ERROR
}