http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49058
--- Comment #14 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-05-22 22:20:24 UTC --- Sorry, hit return inadvertently. Anyway, the idea would be, instead of just writing: const _Functor writing something like: typename conditional<(sizeof...(_Args) >= 0, typename add_const<_Functor>::type, typename add_const<_Functor>::type>::type I think that should work, it does in some simple tests I did, and all in all, properly polished, doesn't even look too bad, IMHO.