11

関数へのポインターを関数テンプレートに渡しています。

int f(int a) { return a+1; }

template<typename F>
void use(F f) {
    static_assert(std::is_function<F>::value, "Function required"); 
}

int main() {
    use(&f); // Plain f does not work either.
}

しかし、テンプレート引数Fは関数であると認識されずis_function、静的アサーションは失敗します。コンパイラのエラー メッセージには、それFint(*)(int)関数へのポインタであることが示されています。なぜそのように振る舞うのですか?この場合、関数または関数へのポインタをどのように認識できますか?

4

1 に答える 1