Как мне избежать неявных преобразований на не конструирующих функциях?

Как избежать неявного приведения к неконструктивным функциям?
У меня есть функция, которая принимает целое число в качестве параметра,
но эта функция также принимает символы, bools и longs.
Я полагаю, что это делает это, неявно бросая их.
Как можно избежать этого, чтобы функция принимала только параметры соответствующего типа и в противном случае отказалась бы компилировать?
Существует ключевое слово «явный», но оно не работает с неструктурирующими функциями. : \ что я делаю?
Следующая программа компилируется, хотя я бы этого не хотел:

* пожалуйста, обязательно укажите на любое неправильное использование терминологии и допущений

#include <cstdlib>

//the function signature requires an int
void function(int i);

int main(){

    int i{5};
    function(i); //<- this is acceptable

    char c{'a'};
    function(c); //<- I would NOT like this to compile

    return EXIT_SUCCESS;
}

void function(int i){return;}

Между прочим, способность передавать тип char, long, bool или любой другой целочисленный тип, для которого ожидается int, обусловлена правилами целочисленного продвижения и преобразования, встроенными в язык. Это другой механизм, чем неявные преобразования, выполняемые с неявными конструкторами.

Ответы на вопрос(7)

Ваш ответ на вопрос