ぬーぶがここまで考えてるとは思わないが、確かに関数は難しい

C++で関数に関わるものだけでも
関数のオーバーロード、関数ポインタ、関数テンプレート、関数オブジェクト、ラムダ式、static関数、constメンバ関数、仮想関数とそのオーバーライド、純粋仮想関数、std::function、std::bind、std::mem_fn、クラスで暗黙定義される特殊関数とそのdefault/delete宣言
ADLも知っておかねばなるまい

関数の設計も重要だ
引数や戻り値に、ポインタ、参照どれを使うのか
constを付ける必要はあるのか
ポインタは生ポインタにするのか、スマートポインタにするのか
複数の値をまとめるにはクラス/構造体にするのか、std::tupleを使うのか

エラー通知にも選択肢があり、例外を使うのか、エラーコードを使うのか、std::optionalを使うのか

単純に引数を計算して終わり、というものではない