掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ptr_fun(islower)がコンパイルエラー (ID:66706)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ・ using namespace std; を残したいなら ptr_fun(::islower) とする <cctype>のインクルードで、グローバル名前空間に int islower(int) が 導入される保証はなかったように思います。 今回の例では確かに::islowerが導入されているようですけれど、たまたまでは? 確実にグローバル名前空間に入れたいなら、<cctype>ではなく、<ctype.h>の インクルードが必要ではないでしょうか。でもあまり推奨したくないなぁ。 今回のエラーは、 - islower は、<cctype>の1引数版と<locale>の2引数版(こっちはテンプレート) がある。 - ptr_fun も、1引数の関数へのポインタを取るものと、2引数の関数へのポインタ を取る2種類の関数テンプレートがオーバーロードされている。 というところに原因があるのですから、使用するislowerかptr_funのどちらかの種類を 確定させるとよいと思います。 ・使用するptr_funを確定: ptr_funのテンプレート引数を明示的に指定して、ptr_funの引数の型を確定させる。 std::ptr_fun<int, int>(std::islower) ・使用するislowerを確定: &islowerを int(*)(int) (または islower を int(&)(int)) に static_castして、使用するislowerを確定させる。 std::ptr_fun(static_cast<int (*)(int)>(&std::islower))
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.