原因別の対処方法C言語やC++のコードを書いていると以下のようなコンパイル・エラーが発生することがある。'fn'これは関数呼び出しが正常に行えないという趣旨のメッセージで、原因はいくつか考えられる。引数の型が一致しないケース引数型が合っていないと呼び出せないのでエラーになる。'fn'関数側の定義をきちんと確認せよ。引数の個数が間違ってるケース引数の数を合わせないとエラーになる。'fn'同名関数のケースC++のクラスや名前空間の中で、既存の関数と同名の関数を定義してしまった場合に本エラーが発生することがある。この場合は名前解決演算子::で、グローバルスコープ側のfn関数を呼び出していることを明示してあげれば良い(::fn(88);)。T::type_nameという形式でTクラス内部の型を取得することが出来ますが、取得した型の使いようによっては型の不一致でエラーが発生してしまいます。'setter'setter関数呼び出し時にエラーが発生しています。value_type;)。A().get()))で、このエラーが稀に発生します。Tに指定されたクラスがテンプレートクラスだったり、またはクラスが他の異なるテンプレート型に依存していたりすると、このようなエラーが発生する場合があります。対処1テンプレート型を明示することで対処出来る可能性があります。b);対処2最終的には以下の方法でも対処が可能です。{}T::value_typeの型が既知の型であることを前提としています。暗黙の型変換にも十分に注意する必要があります。SFINAEの仕組みを活用した対応方法もあるため、以下の節も参考にしてみてください。Error)という言語仕様が関係しています。SFINAEはテンプレートの置き換えが失敗してもそれ自体をエラーとは見なさずに、次のオーバーロード候補を探しに行くという特徴があります。callという文言のエラーが発生してしまっている可能性が考えられます。以下のようにオーバーロード候補となる新たな関数を追加することで対処出来ます。