Wie vermeide ich implizite Konvertierungen für nicht konstruierende Funktionen?

Wie vermeide ich das implizite Casting für nichtkonstruierende Funktionen?
Ich habe eine Funktion, die eine ganze Zahl als Parameter nimmt,
Diese Funktion benötigt jedoch auch Zeichen, Bools und Longs.
Ich glaube, es tut dies, indem es sie implizit wirft.
Wie kann ich das vermeiden, damit die Funktion nur Parameter eines übereinstimmenden Typs akzeptiert und die Kompilierung ansonsten ablehnt?
Es gibt ein Schlüsselwort "explicit", es funktioniert jedoch nicht für nichtkonstruierende Funktionen. : \ was mache ich?
Das folgende Programm kompiliert, obwohl ich es nicht möchte:

* Bitte achten Sie darauf, dass Terminologie und Annahmen nicht korrekt verwendet werden

#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;}

Übrigens beruht die Möglichkeit, einen char-, long-, bool- oder im Grunde genommen jeden anderen Integer-Typ zu übergeben, bei dem ein int erwartet wird, auf in die Sprache integrierten Regeln für die Heraufstufung und Konvertierung von Integer-Werten. Dies ist ein anderer Mechanismus als die impliziten Konvertierungen, die mit nicht expliziten Konstruktoren durchgeführt werden.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage