このコード
#include<functional>
int foo(char);
int main()
{
std::function<decltype((foo))> f;
}
エラーが発生します:
aggregate ‘std::function<int (&)(char)> f’ has incomplete type
and cannot be defined
gcc-4.7.2 で。コンパイルされると思いました。
追加の括弧を削除して機能させることができることは知っていますが、何が起こっているのか理解しようとしています。
decltype が参照を追加する理由がわかりません。括弧内の関数名は prvalue であり、その decltype は参照を追加せずに型を推測すると思います。